sql >> Databasteknik >  >> RDS >> PostgreSQL

Operatören finns inte:heltal =heltal[] i en fråga med ANY

Baserat på felmeddelandedelen operator does not exist: integer = integer[] , verkar det som om bs kolumnen måste vara unnest ed, för att få tillbaka den högra sidan till ett integer så att jämförelseoperatorn kan hittas:

WITH bar AS (
  SELECT array_agg(b) AS bs
  FROM foo
  WHERE c < 3
)
SELECT a
FROM foo
WHERE b = ANY ( SELECT unnest(bs) FROM bar);

Detta resulterar i utdata:

A
2
3

Med tanke på dokumentet för NÅGON funktion :

... felet är vettigt, eftersom det vänstra uttrycket är ett integer -- kolumn b -- medan det högra uttrycket är en array av integer s, eller integer[] , och så slutar jämförelsen med formen integer =integer[] , som inte har en operator, och därför resulterar i felet.

unnest använda integer[] värde gör vänster- och högeruttrycken till integer s, och så kan jämförelsen fortsätta.

Ändrad SQL Fiddle .

Obs! att samma beteende ses när du använder IN istället för = ANY .



  1. Hur skulle jag rätta en select-sats för att fråga den här databasen?

  2. Kan inte se mySQL COUNT från 3:e tabellen

  3. värde för långt för typ tecken varierande (100)----nyligen bytte databas, gjorde ingenting i db

  4. Välj specifika data från givet XML-innehåll med hjälp av WHERE-satsen