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
Lepaskan: 2024-12-29 13:44:10
asal
197 orang telah melayarinya

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`
Salin selepas log masuk

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
Salin selepas log masuk

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',''));
Salin selepas log masuk

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`
Salin selepas log masuk

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`
Salin selepas log masuk

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!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan