PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Una query PostgreSQL con "ANY" non funziona

Vuoi usare ALL , non ANY . Dal bel manuale:

9.21.3. QUALSIASI/ALCUNI (array)

expression operator ANY (array expression)

[...] L'espressione di sinistra viene valutata e confrontata con ciascun elemento dell'array utilizzando l'operatore specificato , che deve produrre un risultato booleano. Il risultato di ANY è "vero" se si ottiene un risultato vero.

Quindi se diciamo questo:

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

allora otterremo true poiché (1 != 1) or (1 != 2) è vero. ANY è essenzialmente un OR operatore. Ad esempio:

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

Se guardiamo ALL , vediamo:

9.21.4. TUTTO (array)

expression operator ALL (array expression)

[...] L'espressione di sinistra viene valutata e confrontata con ciascun elemento dell'array utilizzando l'operatore specificato , che deve produrre un risultato booleano. Il risultato di ALL è "vero" se tutti i confronti risultano veri...

quindi se diciamo questo:

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

quindi otterremo false poiché (1 != 1) and (1 != 2) è falso e vediamo che ALL è essenzialmente un AND operatore. Ad esempio:

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

Se vuoi escludere tutti i valori in un array, usa ALL :

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