【问题标题】:how to delete duplicates from a database table based on a certain field如何根据某个字段从数据库表中删除重复项
【发布时间】:2011-02-10 00:45:03
【问题描述】:

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

是否有任何我可以编写的 SQL 将删除每个重复项,因此我每个 Sourceid 只有一条记录?

【问题讨论】:

  • 您指的是任何特定版本的 SQL 吗?

标签: sql database-design


【解决方案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 …

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 2019-11-02
    • 2021-09-06
    相关资源
    最近更新 更多