Baseret på fejlmeddelelsesdelen operator does not exist: integer = integer[]
, ser det ud til, at bs
kolonne skal være unnest
ed, for at få højre side tilbage til et integer
så sammenligningsoperatoren kan findes:
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);
Dette resulterer i outputtet:
A
2
3
Givet dokumentet for ENHVER funktion :
... fejlen giver mening, da det venstre udtryk er et integer
-- kolonne b
-- mens det højre udtryk er en matrix af integer
s, eller integer[]
, og så ender sammenligningen med at have formen integer
=integer[]
, som ikke har en operator, og derfor resulterer i fejlen.
unnest
ved at bruge integer[]
værdi gør venstre- og højrehåndsudtrykkene til integer
s, og så kan sammenligningen fortsætte.
Ændret SQL Fiddle .
Bemærk: at den samme adfærd ses ved brug af IN
i stedet for = ANY
.