mysql - 删除 MySQL 中除重复行之外的所有重复行?

标签 mysql sql duplicates

如何从 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 ,它删除了表中的每一行。

  1. 如果你想保留id最低的行值:

    DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name
    
  2. 如果要保留 id 最高的行值:

    DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name
    

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

不确定其他版本。

<小时/>

更新:由于人们在谷歌上搜索删除重复项最终会出现在这里
虽然OP的问题是关于DELETE ,请注意使用INSERTDISTINCT速度要快得多。对于具有 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/

相关文章:

php - 查询未返回所有可能的结果

sql - 如何删除 SQL-Server 中的表变量?我应该这样做吗?

SQL - 为每个匹配给定条件的用户选择最后一个事件

python - 对多变量数据进行重复数据删除的最快方法是什么?

excel - 逻辑解析 Excel 中的字符串以修剪附近的重复项

mysql - 默认Pod上的MySQL ram使用情况

php - 什么是 PDO 上的 bind_result 的等价物

python - Django 过滤来自自定义聚合函数的注释

MySQL 从具有共同的唯一值的 2 个表中进行选择

vector - 如何检查结构的集合是否在字段中具有重复的值?