Op basis van het foutberichtgedeelte bestaat de operator does not exist: integer = integer[]
, lijkt het erop dat de bs
kolom moet unnest
. zijn ed, om de rechterkant terug te krijgen naar een integer
zodat de vergelijkingsoperator kan worden gevonden:
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);
Dit resulteert in de output:
A
2
3
Gezien het document voor de ANY functie :
... de fout is logisch, aangezien de linkeruitdrukking een integer
is -- kolom b
-- terwijl de rechteruitdrukking een array is van integer
s, of integer[]
, en dus is de vergelijking van de vorm integer
=integer[]
, die geen operator heeft, en daarom resulteert in de fout.
unnest
het integer[]
waarde maakt de linker- en rechterhanduitdrukkingen integer
s, en dus kan de vergelijking doorgaan.
Aangepast SQL Fiddle .
Opmerking: dat hetzelfde gedrag wordt gezien bij het gebruik van IN
in plaats van = ANY
.