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
.