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
.