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