PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Toán tử không tồn tại:integer =integer [] trong một truy vấn với BẤT KỲ

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 .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Gấu trúc ghi khung dữ liệu vào lược đồ postgresql khác

  2. Chọn tất cả các cột ngoại trừ một số PostgreSQL

  3. không thể kết nối với bản sao AWS RDS postgres từ pgadmin4

  4. Postgres type {field type} chỉ là một shell

  5. NULL so với `vô cực` trong các loại phạm vi PostgreSQL