如何根据某个字段从数据库表中删除重复项

时间:2011-02-10 00:45:04

标签: sql database-design

我有一张桌子,不知何故被重复了。我基本上想要删除所有重复的记录,这些记录由我的表中名为SourceId的字段定义。每个源ID只应有一条记录。

有没有我可以编写的SQL会删除每个重复项,所以我每个Sourceid只有一条记录?

2 个答案:

答案 0 :(得分:3)

假设您有一个可以打破重复源代码的列ID,您可以使用它。使用min(id)会导致它只保留每个sourceid批处理的min(id)。

delete from tbl
where id NOT in
(
select  min(id)
from tbl
group by sourceid
)

答案 1 :(得分:1)

delete from table
where pk in (
select i2.pk
from table i1
  inner join table i2
   on i1.SourceId = i2.SourceId
)

良好的做法是从一开始 select * from …后来只能替换为delete from …