Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menyelesaikan Ralat 'only_full_group_by' 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
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>
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!