Lajur Bukan Agregat dalam MySQL GROUP BY: A Deviation from Standard
Pelaksanaan MySQL GROUP BY membenarkan kemasukan lajur bukan agregat dalam senarai SELECT, walaupun apabila ia tidak termasuk dalam kriteria pengelompokan. Tingkah laku ini berbeza daripada standard ANSI SQL, yang melarang pemilihan lajur bukan berkumpulan dalam pertanyaan sedemikian.
Percanggahan ini timbul daripada konsep kebergantungan berfungsi. Dalam MySQL, jika lajur tidak terkumpul bergantung pada lajur pengelompokan, MySQL secara senyap memilih dan mengembalikan nilai tunggal untuk lajur itu. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa pertanyaan sedemikian boleh membawa kepada hasil yang tidak jelas jika kebergantungan fungsi tidak dikuatkuasakan.
Sebagai contoh, pertanyaan berikut akan menjadi tidak sah dalam ANSI SQL:
SELECT AVG(table1.col1), table1.personID, persons.col4 FROM table1 JOIN persons ON (table1.personID = persons.id) GROUP BY table1.personID;
Dalam MySQL, pertanyaan ini dibenarkan kerana persons.col4 secara fungsional bergantung pada table1.personID melalui gabungan. Walau bagaimanapun, jika berbilang orang mempunyai ID orang yang sama, keputusan untuk persons.col4 boleh menjadi sewenang-wenangnya.
Untuk mengelakkan kekaburan sedemikian, MySQL menyediakan mod SQL ONLY_FULL_GROUP_BY SQL, yang menguatkuasakan peraturan pengelompokan yang lebih ketat selaras dengan piawaian ANSI. Secara lalai, mod ini tidak didayakan, tetapi ia boleh diaktifkan untuk memastikan pertanyaan mematuhi gelagat standard.
Perhatikan bahawa SQLite juga membenarkan lajur tidak teragregat dalam pertanyaan GROUP BY, tetapi ia memilih nilai terakhir dalam kumpulan bukannya sewenang-wenangnya. Tingkah laku ini tidak boleh dipercayai, kerana ia mungkin berubah dalam versi akan datang. Untuk mengelakkan kekaburan, adalah disyorkan untuk menulis semula pertanyaan supaya tidak jelas dan menentukan.
Atas ialah kandungan terperinci Bagaimanakah MySQL Mengendalikan Lajur Bukan Agregat dalam Klausa GROUP BY?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!