MySQL/MariaDB: Mengubah Gelagat ORDER BY dalam Subqueries
Pertimbangkan pertanyaan berikut, yang sebelum ini berjaya digunakan dalam MySQL 5.5:
SELECT t2.Code from (select Country.Code from Country order by Country.Code desc ) AS t2;
Dalam versi terbaru MySQL (termasuk MariaDB 10.0.14), pertanyaan ini tidak lagi mengisih keputusan dalam tertib menurun seperti yang dijangkakan. Perubahan dalam tingkah laku ini telah menimbulkan kebimbangan tentang kemungkinan pepijat.
Walau bagaimanapun, setelah disiasat, telah disahkan bahawa perubahan ini adalah disengajakan dan tidak dianggap sebagai pepijat. MariaDB telah mendokumentasikan tingkah laku ini, menjelaskan bahawa subkueri mengembalikan set baris yang tidak tertib dan klausa ORDER BY dalam subquery mungkin diabaikan.
Untuk memastikan susunan yang diingini, adalah disyorkan untuk menggunakan klausa ORDER BY pada pertanyaan terluar atau, jika perlu, tambah klausa LIMIT pada subquery:
SELECT t2.Code FROM ( SELECT Country.Code FROM Country ORDER BY Country.Code DESC LIMIT 2 ) AS t2;
Pertanyaan yang disemak ini menggunakan jenis dengan betul dan menghasilkan hasil yang diingini.
Perhatikan bahawa perubahan dalam tingkah laku ini juga digunakan untuk MySQL 5.6, menurut ulasan pada laporan pepijat asal . Pembangun harus menyedari perubahan ini dan melaraskan pertanyaan mereka dengan sewajarnya untuk mengekalkan gelagat pengisihan yang diingini.
Atas ialah kandungan terperinci Mengapa Klausa `ORDER BY` Saya dalam Subkueri MySQL/MariaDB Tidak Berfungsi Lagi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!