Você deseja usar
ALL
, não ANY
. Do manual fino:
9.21.3. ANY/SOME (matriz)
expression operator ANY (array expression)
[...] A expressão da esquerda é avaliada e comparada com cada elemento do array usando o operador fornecido , que deve gerar um resultado booleano. O resultado deANY
é "verdadeiro" se algum resultado verdadeiro for obtido.
Então, se dissermos isso:
1 != any(array[1,2])
então seremos verdadeiros desde
(1 != 1) or (1 != 2)
é verdade. ANY
é essencialmente um OR
operador. Por exemplo:=> select id from (values (1),(2),(3)) as t(id) where id != any(array[1,2]);
id
----
1
2
3
(3 rows)
Se olharmos para
ALL
, Nós vemos:
9.21.4. TODOS (matriz)
expression operator ALL (array expression)
[...] A expressão da esquerda é avaliada e comparada com cada elemento do array usando o operador fornecido , que deve gerar um resultado booleano. O resultado deALL
é "verdadeiro" se todas as comparações forem verdadeiras...
então se dissermos assim:
1 != all(array[1,2])
então teremos false já que
(1 != 1) and (1 != 2)
é false e vemos que ALL
é essencialmente um AND
operador. Por exemplo:=> select id from (values (1),(2),(3)) as t(id) where id != all(array[1,2]);
id
----
3
(1 row)
Se você deseja excluir todos os valores em uma matriz, use
ALL
:select "Ticket_id"
from "Tickets"
where "Status" = 1
and "Ticket_id" != all(array[1,2,3])
limit 6