Rumah  >  Artikel  >  pangkalan data  >  Mengapa Pertanyaan Agregat Saya Tanpa GROUP BY Menyebabkan Ralat dalam MySQL 5.7.14?

Mengapa Pertanyaan Agregat Saya Tanpa GROUP BY Menyebabkan Ralat dalam MySQL 5.7.14?

Barbara Streisand
Barbara Streisandasal
2024-11-01 03:39:02923semak imbas

Why Do My Aggregate Queries Without GROUP BY Cause Errors in MySQL 5.7.14 ?

Pertanyaan Agregat Tanpa KUMPULAN OLEH: Memahami Ralat dan Penyelesaian

Sebelum ini, pada versi MySQL yang lebih lama, pertanyaan tanpa klausa GROUP BY untuk agregat fungsi (cth., COUNT()) selalunya berfungsi tanpa masalah. Walau bagaimanapun, dengan MySQL 5.7.14 dan ke atas, pertanyaan sedemikian mungkin menghadapi ralat:

SQLSTATE[42000]: Syntax error or access violation: 1140 In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column [...]

Ralat ini berpunca daripada perubahan dalam tingkah laku lalai MySQL untuk diselaraskan dengan sistem RDBMS lain, yang memerlukan medan tidak teragregat dalam klausa SELECT untuk disertakan dalam klausa GROUP BY apabila menggunakan fungsi agregat.

Mengatasi Ralat:

Untuk menyelesaikan ralat ini, anda mempunyai dua pilihan:

1. Laraskan Tetapan MySQL:

Anda boleh kembali kepada tingkah laku warisan dengan mengubah suai tetapan MySQL. Walau bagaimanapun, ini biasanya tidak disyorkan kerana ia mengekalkan amalan pertanyaan yang tidak optimum.

2. Betulkan Pertanyaan:

Penyelesaian pilihan ialah mengubah suai pertanyaan untuk memasukkan lajur tidak teragregat dalam klausa GROUP BY. Sebagai contoh, pertanyaan di atas boleh ditulis semula sebagai:

SELECT id, password, COUNT(id) AS count 
FROM users 
WHERE email = :email 
GROUP BY id, password 
LIMIT 1

Pengecualian dalam 5.7.5 :

Dalam MySQL versi 5.7.5 dan lebih baru, ia masih dibenarkan untuk mengecualikan lajur tidak teragregat daripada klausa GROUP BY apabila lajur tidak teragregat telah dikekang kepada satu nilai (cth., menggunakan penapis dalam klausa WHERE). Butiran dan contoh pengecualian ini boleh didapati di sini.

Atas ialah kandungan terperinci Mengapa Pertanyaan Agregat Saya Tanpa GROUP BY Menyebabkan Ralat dalam MySQL 5.7.14?. 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