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

Cách sửa nhóm truy vấn với only_full_group_by

Đây là một lỗi phổ biến đối với người dùng MySQL. Trong MySQL 5.7, theo mặc định, cơ sở dữ liệu thực thi ngữ nghĩa tiêu chuẩn mà hầu hết các cơ sở dữ liệu SQL khác đã thực thi trong nhiều năm.

Quy tắc là mọi cột trong danh sách lựa chọn của bạn phải là một trong:

  • Được đặt tên trong mệnh đề GROUP BY; tức là bạn đang nhóm.
  • Bên trong một hàm tổng hợp như MIN, MAX (), SUM (), GROUP_CONCAT (), v.v.
  • Phụ thuộc về mặt chức năng vào cột mà bạn đang nhóm (đây là phần mở rộng của MySQL đối với hành vi SQL chuẩn và các cơ sở dữ liệu SQL khác không nhất thiết phải hỗ trợ điều này).

Trong truy vấn của bạn (Tôi sẽ mở rộng SELECT * của bạn ):

select user_id, feature_key, feature_value from user_features
where user_id = 1
group by feature_key

Bạn đang nhóm theo feature_key, nhưng điều này có nghĩa là các cột khác không tuân thủ các quy tắc mà tôi đã mô tả ở trên.

Đây là một cách để khắc phục nó:

select MAX(user_id), feature_key, GROUP_CONCAT(feature_value)
from user_features
where user_id = 1
group by feature_key

Có vẻ thừa khi sử dụng MAX(user_id) vì chỉ có một giá trị có thể dựa trên điều kiện mệnh đề WHERE. Nhưng cũng không có hại gì. MIN(user_id) cũng sẽ hoạt động.

Xem thêm các câu trả lời trước đây của tôi về cùng một lỗi này:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. xuất danh sách bảng mysql từ mysql sang tệp csv bằng php

  2. android.content.res.Resources $ NotFoundException:Chuỗi tài nguyên ID # 0x2 Cơ sở dữ liệu

  3. Bảng MySQL với một cột varchar làm khóa ngoại

  4. Làm thế nào để chuyển một danh sách các ID vào thủ tục lưu trữ MySQL?

  5. Chồng chéo Truy vấn Đặt chỗ