1

在 SQL 中,我们需要从表中过滤掉不必要的数据:

  • 案例 1:如果 2 个 ID 相同且 DOD 不为空,则需要记录

  • 案例 2:如果有单个 id 并且 dod 不为空,则需要记录

  • 案例 3:如果 2 个 id 相同并且其中任何一个的 DOD 为空,则不需要记录

在此处输入图像描述

非常感谢您的帮助。

谢谢

4

1 回答 1

0

您可以为此使用分析函数:

select t.*
from (
    select 
        t.*, 
        sum(case when dod is null then 1 else 0 end) over(partition by id) no_nulls
    from mytable t
) t
where no_nulls = 0

请注意,这也排除了没有重复id但其dod存在的记录null(您没有描述如何处理这些记录)。

您还可以使用not exists(如果需要,可以方便地将其转换为delete语句):

select t.*
from mytable t
where not exists(select 1 from mytable t1 where t1.id = t.id and t1.dod is null)
where no_nulls = 0
于 2020-06-02T01:25:19.060 回答