Rumah >pangkalan data >tutorial mysql >Mengapa MySQL GROUP BY Query Menghasilkan Ralat 'only_full_group_by'?

Mengapa MySQL GROUP BY Query Menghasilkan Ralat 'only_full_group_by'?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-29 13:44:10189semak imbas

Why Does My MySQL GROUP BY Query Produce a

Memahami Isu Pengoptimuman SELECT

Dalam MySQL, apabila menggunakan klausa GROUP BY, adalah wajib untuk memasukkan semua lajur bukan agregat dalam PILIH senarai yang tidak bergantung secara fungsi pada lajur terkumpul. Ini dikuatkuasakan oleh tetapan sql_mode=only_full_group_by.

Apabila pertanyaan:

SELECT *
FROM `tbl_customer_pod_uploads`
WHERE `load_id` = '78' AND
      `status` = 'Active'
GROUP BY `proof_type`

dilaksanakan, ia melanggar peraturan ini kerana lajur id tidak disertakan dalam klausa GROUP BY. Ini membawa kepada ralat:

Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'returntr_prod.tbl_customer_pod_uploads.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

Pilihan Penyelesaian

Untuk menyelesaikan isu ini, terdapat beberapa pilihan:

1. Lumpuhkan only_full_group_by Mode:

Ini boleh dilakukan menggunakan arahan berikut:

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

Walau bagaimanapun, ini tidak disyorkan kerana ia boleh menyebabkan hasil yang tidak tepat.

2. Sertakan Semua Lajur dalam Klausa KUMPULAN MENGIKUT:

Pilihan ini memastikan pematuhan dengan mod_kumpulan_penuh_sendiri dengan menyertakan secara eksplisit semua lajur bukan agregat dalam klausa GROUP BY:

SELECT *
FROM `tbl_customer_pod_uploads`
WHERE `load_id` = '78' AND
      `status` = 'Active'
GROUP BY `proof_type`, `id`

3. Gunakan Fungsi Agregat:

Daripada memilih lajur tertentu, pertanyaan boleh menggunakan fungsi agregat untuk mengekstrak data daripada baris terkumpul, menangani isu sambil mematuhi amalan terbaik:

SELECT `proof_type`, COUNT(*) AS `row_count`
FROM `tbl_customer_pod_uploads`
WHERE `load_id` = '78' AND
      `status` = 'Active'
GROUP BY `proof_type`

Pendekatan ini mengelak daripada mendapatkan semula data yang tidak diperlukan dan mengoptimumkan prestasi.

Atas ialah kandungan terperinci Mengapa MySQL GROUP BY Query Menghasilkan Ralat '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