Du vil bruge ALL
, ikke ANY
. Fra den fine manual:
9.21.3. ENHVER/NOGLE (array)
expression operator ANY (array expression)
[...] Det venstre udtryk evalueres og sammenlignes med hvert element i arrayet ved hjælp af den givne operator , hvilket skal give et boolesk resultat. Resultatet af ANY
er "sand", hvis der opnås et sandt resultat.
Så hvis vi siger dette:
1 != any(array[1,2])
så bliver vi sande siden (1 != 1) or (1 != 2)
er sandt. ANY
er i bund og grund en OR
operatør. For eksempel:
=> select id from (values (1),(2),(3)) as t(id) where id != any(array[1,2]);
id
----
1
2
3
(3 rows)
Hvis vi ser på ALL
, ser vi:
9.21.4. ALLE (array)
expression operator ALL (array expression)
[...] Det venstre udtryk evalueres og sammenlignes med hvert element i arrayet ved hjælp af den givne operator , hvilket skal give et boolesk resultat. Resultatet af ALL
er "sand", hvis alle sammenligninger giver sand...
så hvis vi siger dette:
1 != all(array[1,2])
så får vi falsk, da (1 != 1) and (1 != 2)
er falsk, og vi ser, at ALL
er i bund og grund en AND
operatør. For eksempel:
=> select id from (values (1),(2),(3)) as t(id) where id != all(array[1,2]);
id
----
3
(1 row)
Hvis du vil udelukke alle værdier i et array, skal du bruge ALL
:
select "Ticket_id"
from "Tickets"
where "Status" = 1
and "Ticket_id" != all(array[1,2,3])
limit 6