我有一张桌子,不知何故被重复了。我基本上想要删除所有重复的记录,这些记录由我的表中名为SourceId的字段定义。每个源ID只应有一条记录。
有没有我可以编写的SQL会删除每个重复项,所以我每个Sourceid只有一条记录?
答案 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 …