Bạn đang sử dụng sai tiện ích mở rộng MySQL không chuẩn khét tiếng cho GROUP THEO
. SQL chuẩn sẽ luôn từ chối truy vấn của bạn, vì bạn đang đề cập đến các cột không phải là tổng hợp và không được đề cập trong GROUP BY
. Trong hệ thống nhà phát triển của mình, bạn đang cố gắng giải quyết vấn đề đó với ANY_VALUE()
.
Trong phiên bản sản xuất, bạn có thể tắt ONLY_FULL_GROUP_BY Chế độ MySQL . Hãy thử thực hiện điều này :
SET @mode := @@SESSION.sql_mode;
SET SESSION sql_mode = '';
/* your query here */
SET SESSION sql_mode = @mode;
Điều này sẽ cho phép MySQL chấp nhận truy vấn của bạn.
Nhưng hãy nhìn xem, truy vấn của bạn không thực sự chính xác. Khi bạn có thể thuyết phục nó chạy, nó sẽ trả về một hàng được chọn ngẫu nhiên từ các images
bàn. Loại không xác định đó thường gây ra sự nhầm lẫn cho người dùng và nhóm hỗ trợ kỹ thuật của bạn.
Tại sao không làm cho truy vấn tốt hơn, vì vậy nó chọn một hình ảnh cụ thể. Nếu images
của bạn bảng có một id
autoincrement bạn có thể thực hiện việc này để chọn hình ảnh "đầu tiên".
SELECT c.id, c.name, i.*
FROM countries c
LEFT JOIN (
SELECT MIN(id) id, country_id
FROM images
GROUP BY country_id
) first ON c.id = first.country_id
LEFT JOIN images i ON first.id = i.id
Điều đó sẽ trả về một hàng cho mỗi quốc gia với một hình ảnh có thể dự đoán được hiển thị.