SELECT "Ticket_id" FROM "Tickets"
WHERE "Status" = 1 AND ("Ticket_id" != ANY(array[1,2,3])) Limit 6
И результат 1,2,3,4,5,6
SELECT "Ticket_id" FROM "Tickets"
WHERE "Status" = 1 AND ("Ticket_id" != ANY(array[1,2,3])) Limit 6
И результат 1,2,3,4,5,6
Вы хотите использовать ALL
, а не ANY
. Из точное руководство:
9.21.3. ЛЮБОЙ/НЕКОТОРЫЙ (массив)
expression operator ANY (array expression)
[...] Левое выражение оценивается и сравнивается с каждым элементом массива с использованием заданного оператора , который должен приводить к логическому результату. Результатом
ANY
является "true", если получен какой-либо истинный результат.
Итак, если мы скажем так:
1 != any(array[1,2])
тогда мы получим true, так как (1 != 1) or (1 != 2)
- true. ANY
по существу является оператором OR
. Например:
=> select id from (values (1),(2),(3)) as t(id) where id != any(array[1,2]);
id
----
1
2
3
(3 rows)
Если мы посмотрим на ALL
, мы увидим:
9.21.4. ALL (массив)
expression operator ALL (array expression)
[...] Левое выражение оценивается и сравнивается с каждым элементом массива с использованием заданного оператора , который должен приводить к логическому результату. Результатом
ALL
является "true", если все сравнения имеют значение true...
поэтому, если мы скажем так:
1 != all(array[1,2])
то мы получим false, так как (1 != 1) and (1 != 2)
является ложным, и мы видим, что ALL
по существу является оператором AND
. Например:
=> select id from (values (1),(2),(3)) as t(id) where id != all(array[1,2]);
id
----
3
(1 row)
Если вы хотите исключить все значения в массиве, используйте ALL
:
select "Ticket_id"
from "Tickets"
where "Status" = 1
and "Ticket_id" != all(array[1,2,3])
limit 6
Вы имеете в виду:
"Ticked_id" NOT IN (1,2,3)