我需要从数据库中删除重复的行。我可以用简单的SQL查询吗?如果没有,请告诉我一些快速的算法。
示例:
id| field_one | field_two |
1 | 0000000 | 11111111 |
2 | 2222222 | 33333333 |
3 | 2222222 | 33333333 |
4 | 4444444 | 55555555 |
我需要删除id为2的行(或3,无论如何,它们是相同的,但不是两者都有)。 谢谢你的帮助
答案 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)并将第一个表的内容复制到新表中。然后删除旧的名称并将新名称重命名为旧表名。
就是这样。