仅保留由父案例 ID 链接的父行和相应的子行

keep only parent and corresponding child rows linked by parent case ID

我有 table 个案例,其中子案例通过 parent_case_id 字段链接到父案例,该字段包含父案例的 case_idparent_case_id 为空的个案是父个案或没有子个案的个案。我想从此 table 中删除没有子案例的案例,只保留父案例及其对应的子案例。我可以通过自连接保留子案例,但无法弄清楚如何交叉检查案例是父案例。

parent_case_id case_id    
null           abc123
abc123         def456
abc123         ghi789
null           jkl123
jkl123         mno456
null           pqr789  -- Would want to remove this row for example

这涉及使用 CTE 或子查询将查询分成两部分。示例:

with cases_with_children as (
  select 
    distinct parents.case_id
  from cases parents
  join cases children
    on children.parent_case_id = parents.case_id
)
select cases.*
from cases 
left join cases_with_children
  on cases.case_id = cases_with_children.case_id
where parent_case_id is not null 
  or cases_with_children.case_id is not null