首页 > 解决方案 > 需要过滤 postgres 中记录共享一个公共 id 但任何一条都未能通过子查询的所有行

问题描述

我在 Postgres 中有一个看起来像这样的表:

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也会自然过滤我不想要的空值。也尝试过不存在和内部连接,但还没有得到正确的语法。任何帮助将不胜感激!

标签: sqlpostgresqljoin

解决方案


通过添加条件尝试以下操作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

推荐阅读