Rumah >pangkalan data >tutorial mysql >Bagaimana untuk menyelesaikan ralat MySQL 5.7 `only_full_group_by`?

Bagaimana untuk menyelesaikan ralat MySQL 5.7 `only_full_group_by`?

Linda Hamilton
Linda Hamiltonasal
2025-01-25 02:51:09711semak imbas

How to Resolve the MySQL 5.7 `only_full_group_by` Error?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn