I have a table in Postgres that looks something like this:
table ------ id varchar(10) reversed boolean status varchar(3) group_id varchar(10)
The algorithm is if any single record has reversed = true
or status = foo
, all records with the same group_id
should be filtered. If group_id
is null, which is possible, I’d like to keep those records regardless of reversed
or status
The closest I’ve gotten is with a NOT IN
subquery:
select * from table where group_id not in ( select group_id from records where reversed = true or status = foo )
but NOT IN
also filters nulls naturally which i don’t want. have also tried not exists and inner joins but haven’t quite gotten the right syntax. any help would be greatly appreciated!
Advertisement
Answer
Try the following by adding group_id is null
in where
condition,
select * from table where group_id not in ( select group_id from records where (reversed = true or status = foo) ) or group_id is null