我的 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/