Въз основа на частта от съобщението за грешка operator does not exist: integer = integer[] , изглежда, че bs колоната трябва да е unnest ed, за да върнете дясната страна обратно към integer така че операторът за сравнение може да бъде намерен:
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);
Това води до резултата:
A
2
3
Имайки предвид документа за ВСЯКА функция :
... грешката има смисъл, тъй като изразът отляво е integer -- колона b -- докато десният израз е масив от integer s или integer[] и така сравнението завършва във формата integer =integer[] , който няма оператор и следователно води до грешката.
unnest ing на integer[] стойност прави левия и десния израз integer s и така сравнението може да продължи.
Модифициран SQL Fiddle .
Забележка: че същото поведение се наблюдава при използване на IN вместо = ANY .