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

PGError:ERROR:tổng hợp không được phép trong mệnh đề WHERE trên truy vấn AR của một đối tượng và has_many đối tượng của nó

Thông báo lỗi cho bạn biết:

tổng hợp không được phép trong mệnh đề WHERE

count() là một hàm tổng hợp. Sử dụng mệnh đề HAVING cho điều đó.
Truy vấn có thể trông giống như sau:

SELECT r.*
FROM   recommendations r
JOIN   approvals       a ON a.recommendation_id = r.id
WHERE  r.user_id = $current_user_id
GROUP  BY r.id
HAVING count(a.recommendation_id) = 1

Với PostgreSQL 9.1 trở lên là đủ để GROUP BY khóa chính của một bảng (giả sử là recommendations.id PK). Trong các phiên bản Postgres trước 9.1, bạn phải bao gồm tất cả các cột của SELECT danh sách không được tổng hợp trong GROUP BY danh sách. Với các đề xuất recommendations.* trong SELECT , đó sẽ là mọi cột của bảng.

Tôi trích dẫn các ghi chú phát hành của PostgreSQL 9.1:

Cho phép không phải GROUP BY trong danh sách đích truy vấn khi khóa chính được chỉ định trong GROUP BY mệnh đề (Peter Eisentraut)

Đơn giản hơn với một lựa chọn phụ

Dù bằng cách nào, điều này cũng đơn giản hơn và nhanh hơn, thực hiện tương tự:

SELECT *
FROM   recommendations r
WHERE  user_id = $current_user_id
AND   (SELECT count(*)
       FROM   approvals
       WHERE  recommendation_id = r.id) = 1;

Tránh nhân các hàng với một JOIN tiên nghiệm, sau đó bạn không phải tổng hợp chúng lại.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi cú pháp tại hoặc gần người dùng khi thêm ràng buộc Postgres

  2. CHÈN VÀO ... TỪ CHỌN ... QUAY LẠI ánh xạ id

  3. Tổng quan về các phương pháp quét khác nhau trong PostgreSQL

  4. Tham gia truy vấn chỉ với các cột có tất cả các giá trị trong mệnh đề `in`

  5. Createuser:không thể kết nối với cơ sở dữ liệu postgres:FATAL:role tom không tồn tại