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
.