Anda menyalahgunakan ekstensi MySQL tidak standar yang terkenal ke GROUP OLEH
. SQL standar akan selalu menolak kueri Anda, karena Anda menyebutkan kolom yang bukan agregat dan tidak disebutkan dalam GROUP BY
. Di sistem dev Anda, Anda mencoba mengatasinya dengan ANY_VALUE()
.
Dalam produksi, Anda dapat mematikan ONLY_FULL_GROUP_BY Mode MySQL . Coba lakukan ini :
SET @mode := @@SESSION.sql_mode;
SET SESSION sql_mode = '';
/* your query here */
SET SESSION sql_mode = @mode;
Ini akan memungkinkan MySQL untuk menerima permintaan Anda.
Tapi lihat, kueri Anda tidak sepenuhnya benar. Ketika Anda dapat membujuknya untuk berjalan, ia mengembalikan baris yang dipilih secara acak dari images
meja. Ketidakpastian semacam itu sering menyebabkan kebingungan bagi pengguna dan kru dukungan teknis Anda.
Mengapa tidak membuat kueri lebih baik, sehingga memilih gambar tertentu. Jika images
. Anda tabel memiliki id
peningkatan otomatis kolom Anda dapat melakukan ini untuk memilih gambar "pertama".
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
Itu akan mengembalikan satu baris per negara dengan gambar yang dapat diprediksi ditampilkan.