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 .