only_full_group_by
Ralat dalam MySQL 5.7
MySQL versi 5.7 memperkenalkan mod only_full_group_by
, yang memerlukan semua lajur yang tidak diagregatkan dalam pernyataan SELECT
mesti disertakan dalam pernyataan GROUP BY
. Ralat ini berlaku apabila pernyataan SELECT
pertanyaan mengandungi lajur tidak teragregat yang tidak muncul dalam pernyataan GROUP BY
.
Terdapat dua cara untuk menyelesaikan masalah ini:
Kaedah 1: Tambahkan lajur yang tiada pada GROUP BY
Tambah lajur yang tiada mod_users_groups.group_id
pada pernyataan 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_name, g.group_id HAVING COUNT(d.user_id) > 0 ORDER BY g.group_name</code>
Ini memastikan semua lajur yang tidak diagregatkan dalam penyata SELECT
disertakan dalam penyataan GROUP BY
, menghapuskan ralat.
Kaedah 2: Gunakan fungsi agregat
Sebagai alternatif, jika lajur yang hilang tidak berkaitan dengan kumpulan, anda boleh menggunakan fungsi agregat untuk meringkaskan data sebelum memilihnya. Contohnya, jika group_name
sememangnya unik, anda boleh menggantikan mod_users_groups.group_id
dengan fungsi agregat berikut:
<code class="language-sql">MIN(mod_users_groups.group_id)</code>
Ini akan mengembalikan group_name
terkecil untuk setiap group_id
unik, memastikan bahawa pernyataan SELECT
hanya mengandungi lajur agregat.
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan ralat MySQL 5.7 `only_full_group_by`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!