mysql - 删除数据库中的重复行

标签 mysql sql

我发现很难删除重复记录。

想要删除记录

这是我的查询

delete from ldataphd.srvalt3 where a3_loan in (select a3_loan from 
ldataphd.srvalt3 group by a3_loan having(*) >1)

以上查询删除所有记录。

表:

 a3_loan     a3_seq
 1744         1
 1744         32
 1844         1
 1844         35

预期输出

a3_loan      a3_seq
 1744          1
 1844          1

最佳答案

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

当我这样做时,我发现除非我还包含 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的,但请注意,使用INSERT和DISTINCT要快得多。对于800万行的数据库,下面的查询花费了13分钟,而使用DELETE则花费了2个多小时,但仍未完成。

关于mysql - 删除数据库中的重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49532076/

相关文章:

java - 如何创建选择查询来获取树结构数据库表中任何特定节点的所有子节点

php - Laravel SQL 连接超时

php - MySQL 使用动态变量连接两个表

sql - SQL Server 2005-如何为数据库一次备份创建新的备份集

SQL找地址?

SQL (Postgres) 函数定义 - 返回

php - 如何在 PHP 中自动找出特定 MySQL 列的数字索引?

MySQL如何使用SET类型来选择一个SET包含另一个SET中的一个或多个项目的记录

php - Codeigniter RESTful API-{"status":false ,"error" :"Unknown method."}

sql - 错误 : function date_trunc(timestamp without time zone) does not exist