删除DB中的重复行

时间:2018-03-28 10:26:36

标签: 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

4 个答案:

答案 0 :(得分:0)

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

当我这样做时,我发现除非我还包括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个多小时但尚未完成。

答案 1 :(得分:0)

这可能对你有帮助..!

select distinct * into #tmp From EmpDup
   delete from EmpDup
   insert into EmpDup                
   select * from #tmp drop table #tmp

   select * from EmpDup

请参阅:http://www.besttechtools.com/articles/article/sql-query-to-delete-duplicate-rows

答案 2 :(得分:0)

试试此代码......

string = re.sub("[^A-Za-z]]", ' ', string)

答案 3 :(得分:0)

DELETE n1 FROM table n1, table n2 WHERE n1.a3_seq > n2.a3_seq AND n1.a3_loan = n2.a3_loan