gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 23:54:11 24 4
gpt4 key购买 nike

如何从 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/25455261/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com