Допустим надо проверить, что поле входит в какое-то множество. Очевидно, что надо использовать конструкцию типа
field IN (1, 2, 3, ...)
Но что если это множество пустое. Как его указать?
field IN (???)
Действительно, просто пустые скобки указать нельзя, получим ошибку.
postgres@localhost:5432 test=#
SELECT 1 IN ();
ERROR: syntax error at or near ")"
LINE 1: SELECT 1 IN ();
^
Просто NULL тоже нельзя.
postgres@localhost:5432 test=#
SELECT 1 IN NULL;
ERROR: syntax error at or near "NULL"
LINE 1: SELECT 1 IN NULL;
^
NULL в скобках опять нельзя, т.к. в результате всегда будет NULL.
postgres@localhost:5432 test=#
SELECT 1 IN (NULL);
?column?
----------
(1 row)
Как тогда быть? Ответ получается из вопроса - просто получить пустое множество.
postgres@localhost:5432 test=#
SELECT 1 IN (SELECT 1 WHERE FALSE);
?column?
----------
f
(1 row)
postgres@localhost:5432 test=#
SELECT 1 NOT IN (SELECT 1 WHERE FALSE);
?column?
----------
t
(1 row)
1 comment:
in - это: =any
поэйтому просто select 1 =any ( array[]::integer[] )
Post a Comment