PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Eine PostgreSQL-Abfrage mit 'ANY' funktioniert nicht

Sie möchten ALL verwenden , nicht ANY . Aus dem feinen Handbuch:

9.21.3. ALLE/EINIGE (Array)

expression operator ANY (array expression)

[...] Der linke Ausdruck wird ausgewertet und unter Verwendung des angegebenen Operators mit jedem Element des Arrays verglichen , die ein boolesches Ergebnis liefern muss. Das Ergebnis von ANY ist "wahr", wenn ein wahres Ergebnis erhalten wird.

Also, wenn wir das sagen:

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

dann werden wir wahr seit (1 != 1) or (1 != 2) ist wahr. ANY ist im Wesentlichen ein OR Operator. Zum Beispiel:

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

Betrachten wir ALL , sehen wir:

9.21.4. ALLE (Array)

expression operator ALL (array expression)

[...] Der linke Ausdruck wird ausgewertet und unter Verwendung des angegebenen Operators mit jedem Element des Arrays verglichen , die ein boolesches Ergebnis liefern muss. Das Ergebnis von ALL ist "wahr", wenn alle Vergleiche wahr ergeben...

also wenn wir das sagen:

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

dann erhalten wir false seit (1 != 1) and (1 != 2) ist falsch und wir sehen, dass ALL ist im Wesentlichen ein AND Operator. Zum Beispiel:

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

Wenn Sie alle Werte in einem Array ausschließen möchten, verwenden Sie ALL :

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