Du vill använda ALL
, inte ANY
. Från den fina manualen:
9.21.3. NÅGOT/NÅGRA (array)
expression operator ANY (array expression)
[...] Det vänstra uttrycket utvärderas och jämförs med varje element i arrayen med den givna operatorn , vilket måste ge ett booleskt resultat. Resultatet av
ANY
är "sant" om något sant resultat erhålls.
Så om vi säger så här:
1 != any(array[1,2])
då blir vi sanna eftersom (1 != 1) or (1 != 2)
är sant. ANY
är i huvudsak en OR
operatör. Till exempel:
=> select id from (values (1),(2),(3)) as t(id) where id != any(array[1,2]);
id
----
1
2
3
(3 rows)
Om vi tittar på ALL
, vi ser:
9.21.4. ALLA (array)
expression operator ALL (array expression)
[...] Det vänstra uttrycket utvärderas och jämförs med varje element i arrayen med den givna operatorn , vilket måste ge ett booleskt resultat. Resultatet av
ALL
är "sant" om alla jämförelser ger sanna...
så om vi säger så här:
1 != all(array[1,2])
då får vi false eftersom (1 != 1) and (1 != 2)
är falskt och vi ser att ALL
är i huvudsak en AND
operatör. Till exempel:
=> select id from (values (1),(2),(3)) as t(id) where id != all(array[1,2]);
id
----
3
(1 row)
Om du vill exkludera alla värden i en array, använd ALL
:
select "Ticket_id"
from "Tickets"
where "Status" = 1
and "Ticket_id" != all(array[1,2,3])
limit 6