需要过滤postgres中的所有行,其中记录共享一个公共id,但任何一个都无法传递子查询

rt4zxlrg  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(214)

我在postgres有一张table,看起来像这样:

table
------
id        varchar(10)
reversed  boolean
status    varchar(3)
group_id  varchar(10)

算法是如果任何一条记录 reversed = true 或者 status = foo ,所有具有相同 group_id 应进行筛选。如果 group_id 是空的,这是可能的,我想保留这些记录,不管 reversed 或者 status 我得到的最接近的是 NOT IN 子查询:

select * 
from 
  table 
where 
  group_id 
not in (
select 
  group_id 
from 
  records 
where 
  reversed = true 
or 
  status = foo
)

但是 NOT IN 也自然过滤空值,我不想要。我们也尝试了not exists和inner连接,但是还没有得到正确的语法。任何帮助都将不胜感激!

pgpifvop

pgpifvop1#

通过添加 group_id is nullwhere 条件,

select * 
from table 
where group_id not in 
(
  select 
    group_id 
  from records 
  where (reversed = true or status = foo)
)
or group_id is null

相关问题