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!