gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 12:47:38 27 4
gpt4 key购买 nike

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

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

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

    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 中除 One 之外的所有重复行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4685173/

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