Ralat only_full_group_by
MySQL 5.7: penjelasan dan penyelesaian terperinci
Mengalami "Ungkapan #1 senarai SELECT tiada dalam klausa GROUP BY" dan ralat "only_full_group_by" dalam MySQL 5.7 boleh mengelirukan. Artikel ini bertujuan untuk menjelaskan masalah ini dan memberikan penyelesaian.
Analisis Masalah
Versi MySQL sebelum 5.7 membenarkan senarai PILIH mengandungi lajur yang tidak muncul dalam klausa GROUP BY, walaupun nilai lajur ini mungkin berbeza dalam kumpulan. Walau bagaimanapun, dalam versi 5.7, tingkah laku lalai telah berubah untuk membenarkan ini hanya apabila lajur ini diagregatkan. Ini dikuatkuasakan oleh mod "only_full_group_by".
Masalah Selesai
Ralat ini menunjukkan bahawa senarai SELECT pertanyaan mengandungi lajur tidak teragregat yang tidak mempunyai kebergantungan berfungsi pada lajur dalam klausa GROUP BY. Untuk menyelesaikan isu ini, anda boleh mengalih keluar lajur tidak teragregat atau menambahkannya pada klausa GROUP BY.
Penyelesaian yang disyorkan
Untuk pertanyaan khusus ini, adalah disyorkan untuk menambah lajur "group_id" pada klausa GROUP BY, memastikan bahawa semua lajur bukan agregat mempunyai kebergantungan berfungsi pada lajur dalam klausa GROUP BY:
<code class="language-sql">SELECT g.group_id AS 'value', g.group_name AS 'text' FROM mod_users_groups g LEFT JOIN mod_users_data d ON g.group_id = d.group_id WHERE g.active = 1 AND g.department_id = 1 AND g.manage_work_orders = 1 AND g.group_name != 'root' AND g.group_name != 'superuser' GROUP BY g.group_id, g.group_name HAVING COUNT(d.user_id) > 0 ORDER BY g.group_name</code>
Nota lain
Dalam pertanyaan berbilang jadual, yang terbaik adalah melayakkan nama lajur dengan nama jadual atau alias, seperti yang ditunjukkan dalam penyelesaian yang disyorkan.
Mematikan "only_full_group_by" tidak disyorkan kerana ia membenarkan pemilihan sewenang-wenangnya lajur tidak terkumpul, yang boleh membawa kepada hasil yang tidak konsisten dan tidak dapat diramalkan.
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat 'only_full_group_by' MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!