是否删除MySQL中除一行之外的所有重复行?[副本]

这个问题在这里已经有答案了
删除MySQL中的重复行

(26个答案)

去年关闭了

如何从MySQL表中删除所有重复数据

例如,使用以下数据:

从名称中选择*;
+----+--------+
|id |名称|
+----+--------+
|1 |谷歌|
|2 |雅虎|
|3 | msn|
|4 |谷歌|
|5 |谷歌|
|6 |雅虎|
+----+--------+

我将使用从名称中选择不同的名称如果是查询,则选择查询

如何使用DELETE来删除重复项,并只保留每个重复项的一条记录

编辑器警告:此解决方案计算效率低下,可能会导致大表连接中断。

NB-您需要首先在表的测试副本上执行此操作

当我这样做时,我发现除非我也包括和n1.id&lt&燃气轮机;n2.id,它删除了表中的每一行。

  1. 如果要保留具有最低id值的行:

    从名称n1、名称n2中删除n1,其中n1.id>n2.id和n1.name=n2.name
    
  2. 如果要保留具有最高id值的行:

    从名称n1、名称n2中删除n1,其中n1.id<n2.id和n1.name=n2.name
    

我在MySQL 5.1中使用了这种方法

不确定其他版本


更新:因为人们在谷歌上搜索删除重复项的结果就出现在这里
虽然OP的问题是关于删除,但请注意使用插入区分要快得多。对于一个有800万行的数据库,下面的查询耗时13分钟,而使用DELETE,则耗时2个多小时,但仍未完成

插入到诱惑名(cellId、attributeId、entityRowId、value)
选择不同的单元格ID、attributeId、entityRowId、value
从表名开始;

发表评论