【发布时间】:2011-02-10 00:45:03
【问题描述】:
我有一张桌子不知何故被复制了。我基本上想删除所有重复的记录,这些记录由我的表中名为 SourceId 的字段定义。每个来源 ID 应该只有一条记录。
是否有任何我可以编写的 SQL 将删除每个重复项,因此我每个 Sourceid 只有一条记录?
【问题讨论】:
-
您指的是任何特定版本的 SQL 吗?
标签: sql database-design
我有一张桌子不知何故被复制了。我基本上想删除所有重复的记录,这些记录由我的表中名为 SourceId 的字段定义。每个来源 ID 应该只有一条记录。
是否有任何我可以编写的 SQL 将删除每个重复项,因此我每个 Sourceid 只有一条记录?
【问题讨论】:
标签: sql database-design
假设您有一个列 ID 可以打破重复的 sourceid,您可以使用它。使用 min(id) 会导致它只保留每个 sourceid 批次的 min(id)。
delete from tbl
where id NOT in
(
select min(id)
from tbl
group by sourceid
)
【讨论】:
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 …
【讨论】: