Berdasarkan bagian pesan kesalahan operator does not exist: integer = integer[] , tampaknya bs kolom harus unnest ed, untuk mengembalikan sisi kanan ke integer sehingga operator perbandingan dapat ditemukan:
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);
Ini menghasilkan output:
A
2
3
Diberikan dokumen untuk FUNGSI APA PUN :
... kesalahannya masuk akal, karena ekspresi sebelah kiri adalah integer -- kolom b -- sedangkan ekspresi tangan kanan adalah larik integer s, atau integer[] , dan perbandingannya berakhir dalam bentuk integer =integer[] , yang tidak memiliki operator, dan karena itu menghasilkan kesalahan.
unnest dengan integer[] value membuat ekspresi kiri dan kanan integer s, sehingga perbandingan dapat dilanjutkan.
Modifikasi SQL Fiddle .
Catatan: bahwa perilaku yang sama terlihat saat menggunakan IN bukannya = ANY .