Для этого вы можете использовать массивы:
CREATE TABLE mytable (including_ids integer[], excluding_ids integer[]);
INSERT INTO mytable VALUES ('{123,456}', '{456,789}');
INSERT INTO mytable VALUES ('{1,2,3}', '{3,4,5}');
Тогда вы можете получить желаемый результат следующим образом:
SELECT (SELECT array_agg(i)
FROM unnest(m.including_ids) AS arr(i)
WHERE NOT ARRAY[i] <@ m.excluding_ids)
FROM mytable AS m;
array_agg
-----------
{123}
{1,2}
(2 rows)
Но, как прокомментировал ярл, используя массивы или другие составныеТипы данных часто являются плохой идеей, если вы хотите много манипулировать значениями в базе данных.Более нормализованная модель данных часто является лучшей идеей: запросы станут проще, а производительность будет лучше.