Subquery MySQL/MariaDB ORDER BY Behavior
Dalam versi MySQL sebelum 5.5, klausa ORDER BY dalam subquery telah digunakan seperti yang diharapkan. Walau bagaimanapun, dalam versi terbaru MariaDB (cth., 10.0.14), klausa ORDER BY tidak digunakan dalam subkueri apabila tiada klausa LIMIT ditentukan.
Perubahan Pepijat atau Tingkah Laku?
Selepas menyiasat isu ini, telah disahkan bahawa tingkah laku ini adalah bertujuan dan bukan pepijat. MariaDB mengikut piawaian SQL, yang tidak memerlukan susunan khusus untuk baris dalam subkueri. Oleh itu, klausa ORDER BY diabaikan di dalam subqueries.
Gelagat Berdokumen
Menurut dokumentasi MariaDB, adalah disyorkan untuk menggunakan klausa ORDER BY pada pertanyaan terluar atau tambah klausa LIMIT untuk menguatkuasakan pesanan dalam subquery.
Contoh
Pertanyaan berikut menunjukkan perbezaan tingkah laku:
SELECT t2.Code FROM ( SELECT Country.Code FROM Country ORDER BY Country.Code DESC ) AS t2;
Tanpa klausa LIMIT, MariaDB tidak akan menggunakan ORDER BY klausa di dalam subquery, menghasilkan hasil yang tidak tertib. Untuk menguatkuasakan tertib menurun, klausa LIMIT boleh ditambah:
SELECT t2.Code FROM ( SELECT Country.Code FROM Country ORDER BY Country.Code DESC LIMIT 2 ) AS t2;
Dengan menambahkan klausa LIMIT, klausa ORDER BY digunakan dalam subkueri, menghasilkan hasil menurun dengan betul.
Nota
Adalah penting untuk ambil perhatian bahawa perubahan tingkah laku ini juga boleh menjejaskan Versi MySQL melebihi 5.5. Sentiasa rujuk dokumentasi rasmi atau nota keluaran untuk mengesahkan tingkah laku khusus untuk versi yang anda gunakan.
Atas ialah kandungan terperinci Mengapa Subquery MariaDB Saya Mengabaikan `PESANAN OLEH` Tanpa `HAD`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!