如何从 MySQL 表中删除所有重复数据?
例如,使用以下数据:
SELECT * FROM names;
+----+--------+
| id | name |
+----+--------+
| 1 | google |
| 2 | yahoo |
| 3 | msn |
| 4 | google |
| 5 | google |
| 6 | yahoo |
+----+--------+
我会使用SELECT DISTINCT name FROM names;
如果它是 SELECT
询问。
我该如何使用 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
最高的行值: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;
关于mysql - 删除 MySQL 中除重复行之外的所有重复行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55149358/