Vuoi usare ALL
, non ANY
. Dal bel manuale:
9.21.3. QUALSIASI/ALCUNI (array)
expression operator ANY (array expression)
[...] L'espressione di sinistra viene valutata e confrontata con ciascun elemento dell'array utilizzando l'operatore specificato , che deve produrre un risultato booleano. Il risultato di ANY
è "vero" se si ottiene un risultato vero.
Quindi se diciamo questo:
1 != any(array[1,2])
allora otterremo true poiché (1 != 1) or (1 != 2)
è vero. ANY
è essenzialmente un OR
operatore. Ad esempio:
=> select id from (values (1),(2),(3)) as t(id) where id != any(array[1,2]);
id
----
1
2
3
(3 rows)
Se guardiamo ALL
, vediamo:
9.21.4. TUTTO (array)
expression operator ALL (array expression)
[...] L'espressione di sinistra viene valutata e confrontata con ciascun elemento dell'array utilizzando l'operatore specificato , che deve produrre un risultato booleano. Il risultato di ALL
è "vero" se tutti i confronti risultano veri...
quindi se diciamo questo:
1 != all(array[1,2])
quindi otterremo false poiché (1 != 1) and (1 != 2)
è falso e vediamo che ALL
è essenzialmente un AND
operatore. Ad esempio:
=> select id from (values (1),(2),(3)) as t(id) where id != all(array[1,2]);
id
----
3
(1 row)
Se vuoi escludere tutti i valori in un array, usa ALL
:
select "Ticket_id"
from "Tickets"
where "Status" = 1
and "Ticket_id" != all(array[1,2,3])
limit 6