Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menyelesaikan Ralat 'only_full_group_by' MySQL?

Bagaimana untuk Menyelesaikan Ralat 'only_full_group_by' MySQL?

Patricia Arquette
Lepaskan: 2025-01-25 03:11:08
asal
970 orang telah melayarinya

How to Resolve the MySQL

MySQL only_full_group_by Ralat: Panduan Komprehensif

MySQL 5.7 memperkenalkan only_full_group_by mod SQL, yang membawa kepada ralat seperti ini:

<code>Expression #1 of SELECT list is not in GROUP BY clause and contains non-aggregated column 'support_desk.mod_users_groups.group_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by</code>
Salin selepas log masuk

Ralat ini timbul kerana only_full_group_by mewajibkan semua lajur dalam senarai SELECT, tidak termasuk lajur agregat, mesti juga muncul dalam klausa GROUP BY. Versi MySQL sebelumnya tidak menguatkuasakan perkara ini, berpotensi menghasilkan hasil yang tidak jelas.

Penyelesaian dan Penyelesaian Masalah

Berikut ialah cara untuk menangani isu ini:

1. Sertakan Lajur dalam GROUP BY:

Pembetulan paling mudah ialah menambahkan lajur yang menyinggung perasaan (group_id dalam contoh ini) pada klausa GROUP BY anda:

...
GROUP BY group_name, group_id
...
Salin selepas log masuk

2. Agregat atau Gunakan ANY_VALUE():

Jika anda hanya memerlukan satu nilai daripada lajur tidak teragregat dalam setiap kumpulan, gunakan fungsi agregat seperti COUNT() atau SUM(). Sebagai alternatif, ANY_VALUE() mengembalikan nilai arbitrari daripada kumpulan:

SELECT ANY_VALUE(g.group_id) AS value, g.group_name AS text ...
Salin selepas log masuk

3. Lumpuhkan only_full_group_by (Tidak Disyorkan):

Anda boleh melumpuhkan mod ini, tetapi biasanya tidak digalakkan kerana ia menutup pertanyaan yang mungkin bermasalah:

SET sql_mode = 'only_full_group_by=OFF';
Salin selepas log masuk

Amalan Terbaik

  • Nama Lajur Layak: Sentiasa layakkan nama lajur dengan alias jadual (cth., g.group_id) apabila menggunakan berbilang jadual untuk mengelakkan kesamaran. Pertanyaan yang disemak mungkin kelihatan seperti ini:
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
...
Salin selepas log masuk
  • Keunikan: Pastikan group_id dan group_name adalah unik dalam kumpulan masing-masing untuk mengelakkan hasil yang tidak dijangka daripada nilai pendua.

Dengan mengikuti langkah ini, anda boleh menyelesaikan only_full_group_by pelanggaran dengan berkesan dan menulis pertanyaan MySQL yang lebih mantap dan boleh diramal.

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!

Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan