'How to include and exclude ids in once query postgresql

I use PostgreSQL 13.3

I'm trying to think how I can make include/exclude in query at the same time

I have include_system_ids [1,5] and exclude_system_ids [3]

There's one big table - records

system_records table

record system_id
1 1
1 5
1 3
2 1
2 5

If a record contains an exclusive identifier, then it should not be included in the final selection. I had some several tries, but I didn't get a necessary result

Awaiting result: record with id 2

Fact result: 1, 2

My variants

select r.id from records r
left join (select record_id from system_records
   where system_id in (1,5)
) include_ids on r.id = include_ids
left join (select record_id from system_records
   where system_id not in (3)
) exclude_ids on r.id = exclude_ids.id

Honestly, I don't understand how I can do it(( Is there anyone who can help me



Solution 1:[1]

Maybe this query could be a solution (result here)

with x as (select record,string_agg(system_id::varchar,',') as sys_id from records group by record)
select records.* 
from records,x 
where records.record = x.record
and x.sys_id = '1,5'

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Philippe