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
Patricia Arquetteasal
2025-01-25 03:11:08867semak imbas

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>

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:

<code class="language-sql">...
GROUP BY group_name, group_id
...</code>

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:

<code class="language-sql">SELECT ANY_VALUE(g.group_id) AS value, g.group_name AS text ...</code>

3. Lumpuhkan only_full_group_by (Tidak Disyorkan):

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

<code class="language-sql">SET sql_mode = 'only_full_group_by=OFF';</code>

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:
<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
...</code>
  • 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:
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