Ekspresi select array_agg(4)
mengembalikan set baris (sebenarnya set baris dengan 1 baris). Oleh karena itu permintaan
select *
from b
where b.id = any (select array_agg(4)) -- ERROR
mencoba membandingkan bilangan bulat (b.id) dengan nilai baris (yang memiliki 1 kolom bertipe integer[]). Ini menimbulkan kesalahan.
Untuk memperbaikinya, Anda harus menggunakan subquery yang mengembalikan bilangan bulat (bukan larik bilangan bulat):
select *
from b
where b.id = any (select unnest(array_agg(4)))
Atau, Anda dapat menempatkan nama kolom dari hasil select array_agg(4)
sebagai argumen dari any
, misalnya:
select *
from b
cross join (select array_agg(4)) agg(arr)
where b.id = any (arr)
atau
with agg as (
select array_agg(4) as arr)
select *
from b
cross join agg
where b.id = any (arr)
Secara lebih formal, dua kueri pertama menggunakan ANY
dalam bentuk:
expression operator ANY (subquery)
dan dua lainnya menggunakan
expression operator ANY (array expression)
seperti yang dijelaskan dalam dokumentasi:9.22.4. APAPUN/BEBERAPA dan 9.23.3. APAPUN/BEBERAPA (array) .