Udtryk select array_agg(4)
returnerer sæt rækker (faktisk sæt rækker med 1 række). Derfor forespørgslen
select *
from b
where b.id = any (select array_agg(4)) -- ERROR
forsøger at sammenligne et heltal (b.id) med en værdi af en række (som har 1 kolonne af typen heltal[]). Det rejser en fejl.
For at rette det skal du bruge en underforespørgsel, som returnerer heltal (ikke arrays af heltal):
select *
from b
where b.id = any (select unnest(array_agg(4)))
Alternativt kan du placere kolonnenavnet på resultatet af select array_agg(4)
som et argument for any
, f.eks.:
select *
from b
cross join (select array_agg(4)) agg(arr)
where b.id = any (arr)
eller
with agg as (
select array_agg(4) as arr)
select *
from b
cross join agg
where b.id = any (arr)
Mere formelt bruger de to første forespørgsler ANY
af formularen:
expression operator ANY (subquery)
og de to andre bruger
expression operator ANY (array expression)
som det er beskrevet i dokumentationen:9.22.4. NOGEN/NOGLE og 9.23.3. ENHVER/NOGLE (array) .