从DB2中的表中删除重复项

时间:2015-07-22 20:20:47

标签: sql db2

我在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的{​​{1}}。例如应删除包含10的条目Closed

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

如何在单个删除查询中实现此目的?

感谢阅读!

1 个答案:

答案 0 :(得分: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;