Искате да използвате ALL
, а не ANY
. От финото ръководство:
9.21.3. ВСЯКАКВА/НЯКОЙ (масив)
expression operator ANY (array expression)
[...] Изразът отляво се оценява и сравнява с всеки елемент от масива с помощта на даден оператор , което трябва да даде булев резултат. Резултатът от
ANY
е "true", ако се получи някакъв верен резултат.
Така че, ако кажем това:
1 != any(array[1,2])
тогава ще получим истина, тъй като (1 != 1) or (1 != 2)
истина е. 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. ВСИЧКИ (масив)
expression operator ALL (array expression)
[...] Изразът отляво се оценява и сравнява с всеки елемент от масива с помощта на даден оператор , което трябва да даде булев резултат. Резултатът от
ALL
е "вярно", ако всички сравнения дават истина...
така че ако кажем това:
1 != all(array[1,2])
тогава ще получим false, тъй като (1 != 1) and (1 != 2)
е false и виждаме, че 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