Na podstawie komunikatu o błędzie część operator does not exist: integer = integer[] , wygląda na to, że bs kolumna musi być unnest ed, aby przywrócić prawą stronę z powrotem do integer więc operator porównania można znaleźć:
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);
Daje to wynik:
A
2
3
Biorąc pod uwagę dokument dla ANY :
... błąd ma sens, ponieważ wyrażenie po lewej stronie to integer -- kolumna b -- podczas gdy wyrażenie po prawej stronie jest tablicą integer s lub integer[] , więc porównanie kończy się w postaci integer =integer[] , który nie ma operatora i dlatego powoduje błąd.
unnest ing integer[] wartość sprawia, że wyrażenia lewe i prawe są integer s, więc porównanie może być kontynuowane.
Zmodyfikowane SQL Fiddle .
Uwaga: że to samo zachowanie jest widoczne przy użyciu IN zamiast = ANY .