Sie möchten ALL verwenden , nicht ANY . Aus dem feinen Handbuch:
9.21.3. ALLE/EINIGE (Array)
expression operator ANY (array expression)
[...] Der linke Ausdruck wird ausgewertet und unter Verwendung des angegebenen Operators mit jedem Element des Arrays verglichen , die ein boolesches Ergebnis liefern muss. Das Ergebnis von ANY ist "wahr", wenn ein wahres Ergebnis erhalten wird.
Also, wenn wir das sagen:
1 != any(array[1,2])
dann werden wir wahr seit (1 != 1) or (1 != 2) ist wahr. ANY ist im Wesentlichen ein OR Operator. Zum Beispiel:
=> select id from (values (1),(2),(3)) as t(id) where id != any(array[1,2]);
id
----
1
2
3
(3 rows)
Betrachten wir ALL , sehen wir:
9.21.4. ALLE (Array)
expression operator ALL (array expression)
[...] Der linke Ausdruck wird ausgewertet und unter Verwendung des angegebenen Operators mit jedem Element des Arrays verglichen , die ein boolesches Ergebnis liefern muss. Das Ergebnis von ALL ist "wahr", wenn alle Vergleiche wahr ergeben...
also wenn wir das sagen:
1 != all(array[1,2])
dann erhalten wir false seit (1 != 1) and (1 != 2) ist falsch und wir sehen, dass ALL ist im Wesentlichen ein AND Operator. Zum Beispiel:
=> select id from (values (1),(2),(3)) as t(id) where id != all(array[1,2]);
id
----
3
(1 row)
Wenn Sie alle Werte in einem Array ausschließen möchten, verwenden Sie ALL :
select "Ticket_id"
from "Tickets"
where "Status" = 1
and "Ticket_id" != all(array[1,2,3])
limit 6