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