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

Delete all Duplicate Rows except for One in MySQL?(删除 MySQL 中除 One 之外的所有重复行?)
本文介绍了删除 MySQL 中除 One 之外的所有重复行?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

How would I delete all duplicate data from a MySQL Table?

例如,使用以下数据:

SELECT * FROM names;

+----+--------+
| id | name   |
+----+--------+
| 1  | google |
| 2  | yahoo  |
| 3  | msn    |
| 4  | google |
| 5  | google |
| 6  | yahoo  |
+----+--------+

如果是 SELECT 查询,我会使用 SELECT DISTINCT name FROM names;.

I would use SELECT DISTINCT name FROM names; if it were a SELECT query.

我将如何使用 DELETE 执行此操作,以仅删除重复项并仅保留每个记录?

How would I do this with DELETE to only remove duplicates and keep just one record of each?

推荐答案

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

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

NB - You need to do this first on a test copy of your table!

当我这样做的时候,我发现除非我也包括了 AND n1.id <>n2.id,它删除了表中的每一行.

When I did it, I found that unless I also included AND n1.id <> n2.id, it deleted every row in the table.

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

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

  • 如果要保留 id 值最高的行:

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

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

    I used this method in MySQL 5.1

    不确定其他版本.

    更新:由于人们在谷歌上搜索删除重复项到此结束
    虽然 OP 的问题是关于 DELETE,但请注意,使用 INSERTDISTINCT 会快得多.对于一个有 800 万行的数据库,下面的查询耗时 13 分钟,而使用 DELETE 则耗时 2 个多小时,但仍未完成.

    Update: Since people Googling for removing duplicates end up here
    Although the OP's question is about DELETE, please be advised that using INSERT and DISTINCT is much faster. For a database with 8 million rows, the below query took 13 minutes, while using DELETE, it took more than 2 hours and yet didn't complete.

    INSERT INTO tempTableName(cellId,attributeId,entityRowId,value)
        SELECT DISTINCT cellId,attributeId,entityRowId,value
        FROM tableName;
    

    这篇关于删除 MySQL 中除 One 之外的所有重复行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

    本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

    相关文档推荐

    Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
    Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
    Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
    Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
    auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
    Sort by ID DESC(按ID代码排序)