式select array_agg(4)
行のセット(実際には1行の行のセット)を返します。したがって、クエリ
select *
from b
where b.id = any (select array_agg(4)) -- ERROR
整数(b.id)を行の値(integer []型の列が1つある)と比較しようとします。エラーが発生します。
これを修正するには、(整数の配列ではなく)整数を返すサブクエリを使用する必要があります:
select *
from b
where b.id = any (select unnest(array_agg(4)))
または、select array_agg(4)
の結果の列名を配置することもできます。 any
の引数として 例:
select *
from b
cross join (select array_agg(4)) agg(arr)
where b.id = any (arr)
または
with agg as (
select array_agg(4) as arr)
select *
from b
cross join agg
where b.id = any (arr)
より正式には、最初の2つのクエリはANY
を使用します フォームの:
expression operator ANY (subquery)
そして他の2つは使用します
expression operator ANY (array expression)
ドキュメントに記載されているように:9.22.4。いずれか/一部
および