当前位置: 首页 > 面试题库 >

删除除MySQL中所有重复行以外的所有重复行?[重复]

舒博雅
2023-03-14
问题内容

这个问题已经在这里有了答案

在MySQL中删除重复的行
(25个答案)

3个月前关闭。

如何从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才能只删除重复项并仅保留每个记录一个?


问题答案:

编辑者警告:此解决方案的计算效率低下,可能会降低大型表的连接。

注意:您 需要 首先在表的 测试副本 上执行此操作!

完成此操作后,我发现,除非也包含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表中删除所有重复数据? 例如,具有以下数据: 我会使用,如果它是一个查询。 我该怎么做才能只删除重复项并仅保留每个记录一个? 问题答案: 编辑者警告:此解决方案的计算效率低下,可能会降低大型表的连接。 注意:您 需要 首先在表的 测试副本 上执行此操作! 完成此操作后,我发现,除非也包含,否则它将删除表中的每一行。 如果要使行的值保持最低,请执行以下操作: 如果要保留最

  • 问题内容: 我有三列的表:,和 有重复的字段。我想删除所有具有相同的行为别人 ,除了 对最近更新的一个。 因此,如果表包含这些行: 然后,我只想保留这些行: 您如何在SQL中做到这一点?我想象会从具有重复值的行中删除单个random(?)行,但是如何使其除最近更新的行之外的 所有 行删除呢? 问题答案: 您可以使用左联接来执行此操作: 这意味着对于每一行,它会寻找更新日期最近的另一行,如果有更新日

  • 我有一个数据集,如下所示: 但不管用。

  • 我需要删除所有行而不留下任何唯一记录。如果存在重复,则删除所有匹配的行。Criteria是C列,如果C列中存在任何重复记录,则删除整行(包括unique)。

  • 问题内容: 我有一个注释表,其结构如下: 我有很多重复的评论,名字和电子邮件都一样。我需要删除它们,有人可以建议我如何使用一个查询来实现此目标吗? 谢谢 问题答案:

  • 我想通过删除所有具有相同值的行,但无法获取。