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 .