Dựa trên phần thông báo lỗi operator does not exist: integer = integer[] , có vẻ như bs cột cần phải unnest ed, để đưa phía bên phải trở lại một số nguyên integer vì vậy có thể tìm thấy toán tử so sánh:
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);
Điều này dẫn đến kết quả đầu ra:
A
2
3
Cung cấp tài liệu cho hàm BẤT KỲ :
... lỗi có lý, vì biểu thức bên trái là integer - cột b - trong khi biểu thức bên phải là một mảng integer s, hoặc integer[] và do đó kết thúc so sánh có dạng integer =integer[] , không có toán tử và do đó dẫn đến lỗi.
unnest nhập integer[] giá trị làm cho các biểu thức bên trái và bên phải integer s, và do đó, việc so sánh có thể tiếp tục.
Đã sửa đổi SQL Fiddle .
Lưu ý: rằng hành vi tương tự được nhìn thấy khi sử dụng IN thay vì = ANY .