sql >> Databasteknik >  >> RDS >> PostgreSQL

En PostgreSQL-fråga med 'ANY' fungerar inte

Du vill använda ALL , inte ANY . Från den fina manualen:

9.21.3. NÅGOT/NÅGRA (array)

expression operator ANY (array expression)

[...] Det vänstra uttrycket utvärderas och jämförs med varje element i arrayen med den givna operatorn , vilket måste ge ett booleskt resultat. Resultatet av ANY är "sant" om något sant resultat erhålls.

Så om vi säger så här:

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

då blir vi sanna eftersom (1 != 1) or (1 != 2) är sant. ANY är i huvudsak en OR operatör. Till exempel:

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

Om vi ​​tittar på ALL , vi ser:

9.21.4. ALLA (array)

expression operator ALL (array expression)

[...] Det vänstra uttrycket utvärderas och jämförs med varje element i arrayen med den givna operatorn , vilket måste ge ett booleskt resultat. Resultatet av ALL är "sant" om alla jämförelser ger sanna...

så om vi säger så här:

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

då får vi false eftersom (1 != 1) and (1 != 2) är falskt och vi ser att ALL är i huvudsak en AND operatör. Till exempel:

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

Om du vill exkludera alla värden i en array, använd ALL :

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


  1. TABLESAMPLE returnerar fel antal rader?

  2. Vad är en skalär UDF i SQL Server?

  3. Hur kör man ett SSIS-paket från .NET?

  4. Hur skapar man en MySQL hierarkisk rekursiv fråga?