MySQL "only_full_group_by" penyelesaian masalah dan penyelesaian ralat
MySQL versi 5.7 memperkenalkan mod SQL "only_full_group_by" , menyebabkan beberapa pernyataan pertanyaan yang sebelum ini berjalan secara normal untuk melaporkan ralat. Ralat ini berlaku apabila senarai SELECT mengandungi lajur bukan agregat yang tidak disenaraikan dalam klausa GROUP BY dan tidak mempunyai kebergantungan fungsi pada lajur dalam klausa GROUP BY.
Penyelesaian adalah dengan menambah lajur group_id
pada klausa KUMPULAN OLEH supaya pernyataan pertanyaan mematuhi mod "hanya_kumpulan_penuh_mengikut". Ini memastikan bahawa terdapat hanya satu baris hasil untuk setiap kombinasi group_id
dan group_name
yang berbeza.
Amalan terbaik ialah melayakkan semua lajur dengan nama jadual atau alias, terutamanya apabila bekerja dengan berbilang jadual. Ini membantu mengelakkan kekaburan dan memastikan data yang diperlukan dipilih.
Berikut ialah pernyataan pertanyaan yang diubah suai, yang boleh dilaksanakan seperti biasa dalam mod "hanya_kumpulan_penuh_oleh":
<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>
Tidak disyorkan untuk melumpuhkan mod "only_full_group_by" kerana ia membantu memastikan integriti dan ketepatan data. Dengan memaksa kemasukan lajur tidak teragregat dalam klausa GROUP BY, MySQL boleh memastikan bahawa keputusan adalah tepat dan mencerminkan data terkumpul yang dijangkakan.
Atas ialah kandungan terperinci Bagaimana untuk memperbaiki ralat 'Only_Full_Group_By' MySQL dalam pertanyaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!