Chcete použít ALL
, nikoli ANY
. Z jemného manuálu:
21.9.3. JAKÉKOLI/NĚKTERÉ (pole)
expression operator ANY (array expression)
[...] Levý výraz je vyhodnocen a porovnán s každým prvkem pole pomocí daného operátoru , což musí poskytnout booleovský výsledek. Výsledek
ANY
je "true", pokud je získán jakýkoli pravdivý výsledek.
Takže když řekneme toto:
1 != any(array[1,2])
pak dostaneme true, protože (1 != 1) or (1 != 2)
je pravda. ANY
je v podstatě OR
operátor. Například:
=> select id from (values (1),(2),(3)) as t(id) where id != any(array[1,2]);
id
----
1
2
3
(3 rows)
Pokud se podíváme na ALL
, vidíme:
21.9.4. VŠECHNY (pole)
expression operator ALL (array expression)
[...] Levý výraz je vyhodnocen a porovnán s každým prvkem pole pomocí daného operátoru , což musí poskytnout booleovský výsledek. Výsledek
ALL
je "pravda", pokud všechna srovnání dávají hodnotu true...
takže když řekneme toto:
1 != all(array[1,2])
pak dostaneme false, protože (1 != 1) and (1 != 2)
je nepravda a vidíme, že ALL
je v podstatě AND
operátor. Například:
=> select id from (values (1),(2),(3)) as t(id) where id != all(array[1,2]);
id
----
3
(1 row)
Pokud chcete vyloučit všechny hodnoty v poli, použijte ALL
:
select "Ticket_id"
from "Tickets"
where "Status" = 1
and "Ticket_id" != all(array[1,2,3])
limit 6