PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Uma consulta do PostgreSQL com 'ANY' não está funcionando


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 de ANY é "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 de ALL é "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