mysql - 如何通过保留重复项中的数据但原始项中没有数据的字段来删除MySQL中的重复记录?

标签 mysql duplicate-data duplicates

我的 MySQL 表中有几千条记录和 100 个字段。

某些记录是重复的并被标记为重复。现在,虽然我可以简单地删除重复项,但我想保留原始记录版本中不存在的任何其他可能有值(value)的非空数据。希望我说得有道理。

例如:

a b c d e f key dupe
--------------------
1 d c f k l 1   x
2 g   h   j 1    
3 i   h u u 2
4 u r     t 2   x

从上面的示例表中,所需的输出是:

a b c d e f key dupe
--------------------
2 g c h k j 1
3 i r h u u 2

如果仔细观察,会发现重复项是通过使用 key 来确定的(对于 2 条记录而言,重复项是相同的,因此具有 'x' 代表 dupe 字段的记录就是通过保留一些记录来删除的记录)来自欺骗者的字段(例如键 1 的 c、e 值)。

如果您需要有关这个令人费解的问题的更多信息,请告诉我。

非常感谢!

p.s:如果无法使用 MySQL,那么 PERL/Python 脚本示例就太棒了!谢谢!

最佳答案

如果我正确理解你的话,你需要 1)合并2条记录 2)删除标记的记录(很简单)。

要完成第一个任务,您可以使用类似的东西

UPDATE table1 t1 
INNER JOIN table1 t2 ON (t1.key = t2.key AND t2.dupe='x')
SET t1.b= IFNULL(t1.b,t2.b), t1.c=IFNULL(t1.c,t2.c), ...etc
WHERE t1.dupe IS NULL

附注该查询假设任何记录有 0 或 1 个重复项;如果有更多,则需要修改查询。

关于mysql - 如何通过保留重复项中的数据但原始项中没有数据的字段来删除MySQL中的重复记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2609734/

相关文章:

java - 使用 netbeans GUI 生成器的 JTable 绑定(bind)

mysql - 选择连接表中的字段在每一行中都相同的行

Mysql union all select问题

javascript - 使用 Javascript 将单元格数据从一个表拉到另一个表

mysql - INSERT..ON DUPLICATE KEY UPDATE - 但不使用重复键进行比较

sqlite - 在 SQLite 中合并两个表时出现不需要的重复表结果

php - MYSQL BUG : Duplicate entry on Primary/Unique. 如果我插入单词,Word

php - 如何允许连接到 MariaDB?

php - Mysql - 重复 key 更新不适用于 2 个 key

mysql - SQL 插入 : skip values allready present