Na základě části chybové zprávy operator does not exist: integer = integer[] , zdá se, že bs sloupec musí být unnest ed, abyste dostali pravou stranu zpět na integer takže operátor porovnání lze najít:
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);
Výsledkem je výstup:
A
2
3
Vzhledem k dokumentu pro jakékoli funkce :
... chyba dává smysl, protože levý výraz je integer -- sloupec b -- zatímco výraz vpravo je pole integer s nebo integer[] , a tak srovnání skončí ve tvaru integer =integer[] , který nemá operátor, a proto vede k chybě.
unnest ing the integer[] value dělá levý a pravý výraz integer s, a tak může srovnání pokračovat.
Upravené SQL Fiddle .
Poznámka: že stejné chování je vidět při použití IN místo = ANY .