Rumah >pangkalan data >tutorial mysql >Mengapa MySQL GROUP BY Behavior Tidak Dapat Diramalkan Tanpa Fungsi Agregat?
Tingkah laku bukan deterministik MySQL GROUP BY
klausa tanpa fungsi agregat
Apabila anda menggunakan klausa GROUP BY
dalam pertanyaan MySQL tanpa fungsi agregat dalam klausa SELECT
, kelakuannya mungkin bukan penentu. Ini kerana MySQL membenarkan lajur diabaikan daripada klausa GROUP BY
atas sebab prestasi.
Walau bagaimanapun, peninggalan ini hanya berfungsi jika lajur yang ditinggalkan mempunyai nilai yang sama dalam semua baris dalam setiap kumpulan. Jika ini tidak berlaku, seperti yang ditunjukkan dalam contoh, pelayan bebas untuk memilih sebarang nilai dalam kumpulan. Akibatnya, nilai pulangan tidak ditentukan.
Untuk memastikan hasil yang boleh diramal, adalah disyorkan untuk memasukkan semua lajur yang tidak diagregatkan dalam klausa GROUP BY
. Selain itu, pada umumnya tidak disyorkan untuk menggunakan *
aksara kad bebas untuk memilih semua lajur dalam jadual, kerana ia boleh membawa kepada gelagat yang tidak dapat diramalkan dalam situasi yang sama.
Dokumentasi MySQL dengan jelas menyatakan: "Apabila menggunakan ciri ini, semua baris dalam setiap kumpulan harus mempunyai nilai yang sama untuk lajur yang diabaikan daripada bahagian GROUP BY
Jika syarat ini tidak dipenuhi, hasil pertanyaan tidak ditentukan." .
Oleh itu, pastikan anda mempertimbangkan dengan teliti lajur yang disertakan dalam klausa GROUP BY
dan elakkan meninggalkan lajur yang mengandungi nilai berbeza dalam kumpulan.
Atas ialah kandungan terperinci Mengapa MySQL GROUP BY Behavior Tidak Dapat Diramalkan Tanpa Fungsi Agregat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!