从数据库中删除重复的行

时间:2010-10-08 07:48:05

标签: sql database

我需要从数据库中删除重复的行。我可以用简单的SQL查询吗?如果没有,请告诉我一些快速的算法。

示例:

id| field_one | field_two |
1 | 0000000   | 11111111  |
2 | 2222222   | 33333333  |
3 | 2222222   | 33333333  |
4 | 4444444   | 55555555  |

我需要删除id为2的行(或3,无论如何,它们是相同的,但不是两者都有)。 谢谢你的帮助

4 个答案:

答案 0 :(得分:4)

delete from the_table where id in
   (select max(id) from the_table
      group by field_one, field_two
      having count(*) > 1)

正如评论中所指出的,如果一行出现三次,这将不起作用。您可以重复运行此(重)查询,直到它停止删除内容,或等待更好的答案...

答案 1 :(得分:3)

首先选择所有不同的行,然后删除其他行:

DELETE FROM MyTable 
WHERE id NOT IN
      (
        SELECT MAX(id) FROM MyTable
        GROUP BY field_one, field_two
      )

答案 2 :(得分:2)

set rowcount 1 
delete userTbl1 from userTbl1 a1 where (select count(UName) from userTbl1 a2 where a2.UName =a1.UName)>1
while @@rowcount > 0 
delete userTbl1 from userTbl1 a1 where (select count(UName) from userTbl1 a2 where a2.UName =a1.UName)>1
set rowcount 0

答案 3 :(得分:1)

Thilo的答案是有用的,它只是让你想要的。无论如何,如果你有很多行,它可能会花费很多时间,因为算法具有方形复杂性。如果我是那个问的人,我会选择Thilo的答案作为最佳答案,无论如何我只想给你另一个选择:如果你有很多行,那么另一种可能性是:

创建一个新表,为列组合设置UNIQUE INDEX:(field_one,field_two)并将第一个表的内容复制到新表中。然后删除旧的名称并将新名称重命名为旧表名。

就是这样。