Delete all Duplicate Rows except for One in MySQL?(删除 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.
如果要保留
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,但请注意,使用 INSERT 和 DISTINCT 会快得多.对于一个有 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 之外的所有重复行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:删除 MySQL 中除 One 之外的所有重复行?
基础教程推荐
- SQL 效率:WHERE IN 子查询 vs. JOIN 然后 GROUP 2021-01-01
- 是否可以执行按位分组功能? 2021-01-01
- 需要 MySQL 5.1 中的抽象触发器来更新审计日志 2021-01-01
- SSMS 中的权限问题:“对象 'extended_properties'、数据库 'mssqlsystem_resource'、... 错误 229)上的 SELECT 权限被拒绝" 2022-01-01
- 将 SQL Server DateTime 列迁移到 DateTimeOffset 2021-01-01
- 如何使用 mysql.connector 禁用查询缓存 2022-01-01
- 在 SQL 中连接多个表 2021-01-01
- 无法解决整理冲突 2021-01-01
- SQL Server 实例在登录协商期间返回无效或不受支持的协议版本 2021-01-01
- SQL:使用来自具有相同列名的两个表中的数据... 2021-01-01
