删除重复DB行

问题描述 投票:0回答:4

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

要删除的记录

这里是我的查询

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
mysql sql
4个回答
0
投票

NB - 你需要先做到这一点你的桌子上的一个测试副本!

当我做到了,我发现,除非我也包括在内,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用此方法

不知道其他版本。

更新:由于人们对谷歌搜索删除副本会在这里结束虽然关于删除,请注意任择议定书的问题,使用INSERT和DISTINCT的速度要快得多。对于800万行的数据库,下面的查询用了13分钟,而使用DELETE,花了2个多小时,但没有完成。


0
投票

试试这个代码....

      DELETE FROM MyTable
      LEFT OUTER JOIN (
      SELECT MIN(RowId) as RowId, Col1, Col2, Col3 
      FROM MyTable 
      GROUP BY Col1, Col2, Col3
      ) as KeepRows ON
      MyTable.RowId = KeepRows.RowId
      WHERE
      KeepRows.RowId IS NULL 

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

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

© www.soinside.com 2019 - 2024. All rights reserved.