Đâ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: