mysql - 删除 MySQL 中除 One 之外的所有重复行
如何从 MySQL 表中删除所有重复数据?
例如,使用以下数据:
SELECT * FROM names;
+----+--------+
| id | name |
+----+--------+
| 1 | google |
| 2 | yahoo |
| 3 | msn |
| 4 | google |
| 5 | google |
| 6 | yahoo |
+----+--------+
如果是 SELECT
查询,我会使用 SELECT DISTINCT name FROM names;
。
我将如何使用 DELETE
执行此操作,以仅删除重复项并仅保留每个记录?
请您参考如下方法:
Editor warning: This solution is computationally inefficient and may bring down your connection for a large table.
注意 - 您需要首先在表的测试副本上执行此操作!
我做的时候发现除非我也包括了AND n1.id <> n2.id
,它删除了表格中的每一行。
如果要保留最低的行
id
值:DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name
如果要保留最高的行
id
值(value):DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name
我在 MySQL 5.1 中使用了这种方法
不确定其他版本。
更新:由于人们在谷歌上搜索删除重复项最终会出现在这里
虽然 OP 的问题是关于 DELETE
, 请注意使用 INSERT
和 DISTINCT
快得多。对于一个有 800 万行的数据库,下面的查询用了 13 分钟,而使用 DELETE
,花了2个多小时,还没有完成。
INSERT INTO tempTableName(cellId,attributeId,entityRowId,value)
SELECT DISTINCT cellId,attributeId,entityRowId,value
FROM tableName;
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。