U wilt ALL . gebruiken , niet ANY . Uit de fijne handleiding:
9.21.3. ELKE/SOMMIGE (matrix)
expression operator ANY (array expression)[...] De linkeruitdrukking wordt geëvalueerd en vergeleken met elk element van de array met behulp van de gegeven operator , wat een Booleaans resultaat moet opleveren. Het resultaat van
ANYis "waar" als een waar resultaat wordt verkregen.
Dus als we dit zeggen:
1 != any(array[1,2])
dan worden we waar sinds (1 != 1) or (1 != 2) is waar. ANY is in wezen een OR exploitant. Bijvoorbeeld:
=> select id from (values (1),(2),(3)) as t(id) where id != any(array[1,2]);
id
----
1
2
3
(3 rows)
Als we kijken naar ALL , we zien:
9.21.4. ALLE (matrix) expression operator ALL (array expression)[...] De linkeruitdrukking wordt geëvalueerd en vergeleken met elk element van de array met behulp van de gegeven operator , wat een Booleaans resultaat moet opleveren. Het resultaat van
ALLis "waar" als alle vergelijkingen waar opleveren...
dus als we dit zeggen:
1 != all(array[1,2])
dan krijgen we false omdat (1 != 1) and (1 != 2) is onwaar en we zien dat ALL is in wezen een AND exploitant. Bijvoorbeeld:
=> select id from (values (1),(2),(3)) as t(id) where id != all(array[1,2]);
id
----
3
(1 row)
Als u alle waarden in een array wilt uitsluiten, gebruikt u ALL :
select "Ticket_id"
from "Tickets"
where "Status" = 1
and "Ticket_id" != all(array[1,2,3])
limit 6