Въз основа на частта от съобщението за грешка 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
.