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

En PostgreSQL-forespørgsel med 'ANY' virker ikke

Du vil bruge ALL , ikke ANY . Fra den fine manual:

9.21.3. ENHVER/NOGLE (array)

expression operator ANY (array expression)

[...] Det venstre udtryk evalueres og sammenlignes med hvert element i arrayet ved hjælp af den givne operator , hvilket skal give et boolesk resultat. Resultatet af ANY er "sand", hvis der opnås et sandt resultat.

Så hvis vi siger dette:

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

så bliver vi sande siden (1 != 1) or (1 != 2) er sandt. ANY er i bund og grund en OR operatør. For eksempel:

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

Hvis vi ser på ALL , ser vi:

9.21.4. ALLE (array)

expression operator ALL (array expression)

[...] Det venstre udtryk evalueres og sammenlignes med hvert element i arrayet ved hjælp af den givne operator , hvilket skal give et boolesk resultat. Resultatet af ALL er "sand", hvis alle sammenligninger giver sand...

så hvis vi siger dette:

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

så får vi falsk, da (1 != 1) and (1 != 2) er falsk, og vi ser, at ALL er i bund og grund en AND operatør. For eksempel:

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

Hvis du vil udelukke alle værdier i et array, skal du bruge ALL :

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


  1. oracle -- Opdel flere kommaseparerede værdier i oracle-tabellen til flere rækker

  2. Det samlede antal låse overstiger låsebordets størrelse

  3. Kan ikke trække offset-naive og offset-bevidste datotider

  4. Hvordan kan jeg bruge PDO til at hente et resultatarray i PHP?