从 DB2 中的 table 中删除重复项

Removing duplicates from a table in DB2

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

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

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

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

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

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

感谢阅读!

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

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;