Uttryck select array_agg(4)
returnerar uppsättning rader (faktiskt uppsättning rader med 1 rad). Därav frågan
select *
from b
where b.id = any (select array_agg(4)) -- ERROR
försöker jämföra ett heltal (b.id) med ett värde på en rad (som har en kolumn av typen heltal[]). Det ger upphov till ett fel.
För att fixa det bör du använda en underfråga som returnerar heltal (inte matriser av heltal):
select *
from b
where b.id = any (select unnest(array_agg(4)))
Alternativt kan du placera kolumnnamnet för resultatet av select array_agg(4)
som ett argument för any
, t.ex.:
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)
Mer formellt använder de två första frågorna ANY
av formuläret:
expression operator ANY (subquery)
och de andra två använder
expression operator ANY (array expression)
som det beskrivs i dokumentationen:9.22.4. NÅGOT/NÅGRA och 9.23.3. NÅGOT/NÅGRA (array) .