Vous voulez utiliser ALL , pas ANY . Extrait du bon manuel :
9.21.3. TOUT/CERTAINS (tableau)
expression operator ANY (array expression)[...] L'expression de gauche est évaluée et comparée à chaque élément du tableau à l'aide de l'opérateur donné , qui doit produire un résultat booléen. Le résultat de
ANYest "vrai" si un résultat vrai est obtenu.
Donc, si nous disons ceci :
1 != all(array[1,2])
alors on aura vrai depuis (1 != 1) or (1 != 2) est vrai. ANY est essentiellement un OR opérateur. Par exemple :
=> select id from (values (1),(2),(3)) as t(id) where id != any(array[1,2]);
id
----
1
2
3
(3 rows)
Si nous regardons ALL , on voit :
9.21.4. TOUT (tableau)
expression operator ALL (array expression)[...] L'expression de gauche est évaluée et comparée à chaque élément du tableau à l'aide de l'opérateur donné , qui doit produire un résultat booléen. Le résultat de
ALLest "vrai" si toutes les comparaisons donnent vrai...
donc si nous disons ceci :
1 != all(array[1,2])
alors on aura faux puisque (1 != 1) and (1 != 2) est faux et nous voyons que ALL est essentiellement un AND opérateur. Par exemple :
=> select id from (values (1),(2),(3)) as t(id) where id != all(array[1,2]);
id
----
3
(1 row)
Si vous souhaitez exclure toutes les valeurs d'un tableau, utilisez ALL :
select "Ticket_id"
from "Tickets"
where "Status" = 1
and "Ticket_id" != all(array[1,2,3])
limit 6