我在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
7
与Status
Open
的条目。
如何在单个删除查询中实现此目的?
感谢阅读!
答案 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;