SELECT "Ticket_id" FROM "Tickets"
WHERE "Status" = 1 AND ("Ticket_id" != ANY(array[1,2,3])) Limit 6
Et le résultat est 1,2,3,4,5,6
Vous voulez utiliser ALL
, pas ANY
. Du manuel fin :
9.21.3. TOUT/QUELQUES (tableau)
expression operator ANY (array expression)
[...] L'expression de gauche est évaluée et comparée à chaque élément du tableau en utilisant l'opérateur donné , qui doit donner un résultat booléen. Le résultat de
ANY
est "vrai" si un résultat vrai est obtenu.
Donc, si nous disons ceci:
1 != any(array[1,2])
alors nous deviendrons vrais depuis (1 != 1) or (1 != 2)
est vrai. ANY
est essentiellement un opérateur OR
. 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
, nous voyons :
9.21.4. TOUS (tableau)
expression operator ALL (array expression)
[...] L'expression de gauche est évaluée et comparée à chaque élément du tableau en utilisant l'opérateur donné , qui doit donner un résultat booléen. Le résultat de
ALL
est "vrai" si toutes les comparaisons produisent vrai ...
donc si on dit ça:
1 != all(array[1,2])
alors nous deviendrons faux puisque (1 != 1) and (1 != 2)
est faux et nous voyons que ALL
est essentiellement un opérateur AND
. 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
Tu veux dire:
"Ticked_id" NOT IN (1,2,3)