sql >> Base de Datos >  >> RDS >> PostgreSQL

Una consulta de PostgreSQL con 'ANY' no funciona

Quiere usar ALL , no ANY . Del buen manual:

9.21.3. CUALQUIERA/ALGUNOS (matriz)

expression operator ANY (array expression)

[...] La expresión de la izquierda se evalúa y compara con cada elemento de la matriz utilizando el operador dado. , que debe producir un resultado booleano. El resultado de ANY es "verdadero" si se obtiene algún resultado verdadero.

Así que si decimos esto:

1 != any(array[1,2])

entonces seremos verdaderos desde (1 != 1) or (1 != 2) es verdad. ANY es esencialmente un OR operador. Por ejemplo:

=> select id from (values (1),(2),(3)) as t(id) where id != any(array[1,2]);
 id 
----
  1
  2
  3
(3 rows)

Si miramos ALL , vemos:

9.21.4. TODOS (matriz)

expression operator ALL (array expression)

[...] La expresión de la izquierda se evalúa y compara con cada elemento de la matriz utilizando el operador dado. , que debe producir un resultado booleano. El resultado de ALL es "verdadero" si todas las comparaciones arrojan verdadero...

entonces si decimos esto:

1 != all(array[1,2])

entonces obtendremos falso ya que (1 != 1) and (1 != 2) es falso y vemos que ALL es esencialmente un AND operador. Por ejemplo:

=> select id from (values (1),(2),(3)) as t(id) where id != all(array[1,2]);
 id 
----
  3
(1 row)

Si desea excluir todos los valores en una matriz, use ALL :

select "Ticket_id"
from "Tickets"
where "Status" = 1
  and "Ticket_id" != all(array[1,2,3])
limit 6