MySQL/MariaDB: Susun mengikut dalam Subkueri
Versi terbaru MySQL dan MariaDB telah memperkenalkan perubahan dalam pengendalian pesanan mengikut operasi dalam subkueri.
Asal Pertanyaan:
SELECT t2.Code from (select Country.Code from Country order by Country.Code desc ) AS t2;
Isu:
Dalam MySQL 5.5 dan lebih awal, pertanyaan di atas mengisih hasil subkueri dalam susunan menurun seperti yang dinyatakan. Walau bagaimanapun, dalam versi MySQL dan MariaDB yang lebih baharu, hasil subkueri tidak lagi diisih secara menurun secara lalai.
Sebab:
Perubahan dalam tingkah laku adalah disebabkan oleh yang lebih ketat pematuhan kepada standard SQL. Mengikut piawaian, hasil subkueri ialah set baris yang tidak tertib. Oleh itu, menggunakan perintah mengikut klausa dalam subkueri mungkin tidak menjamin pengisihan yang diingini.
Penyelesaian:
Untuk menyelesaikan isu, terdapat dua pendekatan yang disyorkan:
SELECT t2.Code from (select Country.Code from Country) AS t2 ORDER BY t2.Code DESC;
SELECT t2.Code from (select Country.Code from Country ORDER BY Country.Code DESC LIMIT 2) AS t2;
Ini memastikan bahawa subkueri menghasilkan set hasil yang diisih, tidak kira sama ada susunan mengikut klausa digunakan pada yang paling luar. PILIH.
Tingkah Laku Berdokumen:
MariaDB telah mendokumentasikan tingkah laku ini secara rasmi, dengan menyatakan bahawa menetapkan perintah mengikut klausa dalam subkueri tidak dibenarkan oleh standard SQL dan harus dianggap sebagai set baris yang tidak tersusun. Pendekatan yang disyorkan ialah menggunakan tertib mengikut kepada pertanyaan paling luar atau menggunakan had jika perlu.
Atas ialah kandungan terperinci Subqueries MySQL/MariaDB: Mengapa ORDER BY Behavior Berubah dalam Versi Baru?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!