如何根据某个字段从数据库表中删除重复项
Posted
技术标签:
【中文标题】如何根据某个字段从数据库表中删除重复项【英文标题】:how to delete duplicates from a database table based on a certain field 【发布时间】:2011-02-10 00:45:03 【问题描述】:我有一张桌子不知何故被复制了。我基本上想删除所有重复的记录,这些记录由我的表中名为 SourceId 的字段定义。每个来源 ID 应该只有一条记录。
是否有任何我可以编写的 SQL 将删除每个重复项,因此我每个 Sourceid 只有一条记录?
【问题讨论】:
您指的是任何特定版本的 SQL 吗? 【参考方案1】:假设您有一个列 ID 可以打破重复的 sourceid,您可以使用它。使用 min(id)
会导致它只保留每个 sourceid 批次的 min(id)。
delete from tbl
where id NOT in
(
select min(id)
from tbl
group by sourceid
)
【讨论】:
我不认为这是正确的。如果一个 id 是来自其他 sourceid 的 min(id),它可能会出现在子查询中。我认为你需要一个相关的子查询只是你正在寻找的 min(id)。 @Walter 这里的假设是 ID 在整个表格中是唯一的。【参考方案2】: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 …
【讨论】:
以上是关于如何根据某个字段从数据库表中删除重复项的主要内容,如果未能解决你的问题,请参考以下文章
如何在从多个表中获取多行的同时删除 sql JOIN 中的重复项