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
ANY
is "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
ALL
is "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