Вы также можете использовать функцию regexp_split_to_table()
, чтобы сократить синтаксис:
SELECT x
FROM regexp_split_to_table('1~2~3', '~') AS x
LEFT JOIN tbl t ON t.knr = x
WHERE t.knr IS NULL
Используйте строку в качестве разделителя, которая гарантированно не будет частью какого-либо значения.
Это работает, только если tbl.knr
на самом деле строковый тип как text
.
Если это, на самом деле, числовой тип , такой как integer
do вместо:
SELECT x
FROM regexp_split_to_table('1~2~3', '~') AS x
LEFT JOIN tbl t ON t.knr = x::int
WHERE t.knr IS NULL
Или, для text
:
SELECT x
FROM regexp_split_to_table('1~2~3', '~') AS x
WHERE NOT EXISTS (SELECT * FROM tbl t WHERE t.knr = x)
Для integer
:
SELECT x
FROM regexp_split_to_table('1~2~3', '~') AS x
WHERE NOT EXISTS (SELECT * FROM tbl t WHERE t.knr = x::int)