从 DB2 中的表中删除重复项

Posted

技术标签:

【中文标题】从 DB2 中的表中删除重复项【英文标题】:Removing duplicates from a table in DB2 【发布时间】:2015-07-22 20:20:47 【问题描述】:

我在 DB2 中有一个表 TAB1,如下所示:

ID              Status
_______________________
10              Open
8               Closed
7               Open
10              Closed
7               Open
9               Open
11              Open
5               Closed
_______________________

我想根据以下业务规则在单个 sql 查询中从上表中删除重复项:

1) 如果ID 重复,请删除带有Status Closed 的那个。例如应删除带有Closed 的条目10

2) 如果ID 重复且Status 也相同,则应删除所有重复条目。例如ID 7Status Open 的两个条目都应删除。

如何在单个删除查询中实现这一点?

感谢阅读!

【问题讨论】:

【参考方案1】:

我认为以下几乎是您要求的直接翻译:

delete from tab1
    where (tab1.status = 'closed' and
           exists (select 1
                   from tab1 t2
                   where t2.id = tab1.id and t2.status <> 'closed'
                  )
          ) or
          (select count(*)
           from tab1 t2
           where t2.id = tab1.id and t2.status = tab1.status
          ) > 1;

【讨论】:

以上是关于从 DB2 中的表中删除重复项的主要内容,如果未能解决你的问题,请参考以下文章

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

有没有更快的方法从一个表中删除重复项?

从表中的多个重复项中删除特定记录

根据一列删除重复项并根据另一表中的数据进行过滤

从 MySQL 中的大表中删除重复项的最快过程是啥

从 MySQL 中具有不同列的表的多个连接结果中删除重复项