Rumah >pangkalan data >tutorial mysql >Mengapakah ORDER BY Subquery MariaDB Saya Nampaknya Diabaikan?

Mengapakah ORDER BY Subquery MariaDB Saya Nampaknya Diabaikan?

Susan Sarandon
Susan Sarandonasal
2025-01-03 18:02:39584semak imbas

Why Does My MariaDB Subquery's ORDER BY Clause Seem to Be Ignored?

MySQL/MariaDB: Pesanan Mengikut Percanggahan Subkueri

Dalam versi MySQL sebelum 5.5, subqueries menghormati klausa ORDER BY dalam. Walau bagaimanapun, tingkah laku ini telah berubah dalam versi terkini, termasuk MariaDB 10.0.14.

Isu Diperhatikan

Apabila melaksanakan pertanyaan berikut dalam MariaDB 10.0.14:

SELECT t2.Code from (select Country.Code from Country order by Country.Code desc ) AS t2;

Hasilnya kini diisih dalam susunan menaik (atau mengikut susunan semula jadi), berbeza dengan penurunan yang dijangkakan pesanan.

Penyiasatan

Selepas meneliti dokumentasi MariaDB, tingkah laku yang diperhatikan tidak dianggap sebagai pepijat. Menurut standard SQL, jadual dan subkueri ialah set baris yang tidak tertib. Oleh itu, pengoptimum boleh memilih untuk mengabaikan klausa ORDER BY dalam subquery.

Disyorkan Penyelesaian

Untuk memastikan susunan hasil yang konsisten, adalah disyorkan untuk menggunakan klausa ORDER BY pada pertanyaan luar :

SELECT t2.Code from (select Country.Code from Country) AS t2 ORDER BY t2.Code DESC;

Sebagai alternatif, menggunakan klausa LIMIT dalam subkueri juga boleh memaksa ORDER BY untuk digunakan:

SELECT t2.Code from (select Country.Code from Country ORDER BY Country.Code DESC LIMIT 2) AS t2;

Gelagat dalam MySQL 5.6

Walaupun ujian khusus tidak tersedia pada masa ini, ulasan pada laporan pepijat mencadangkan bahawa MySQL 5.6 mungkin juga menunjukkan tingkah laku yang sama seperti MariaDB 10.0 .14, mengabaikan klausa ORDER BY dalam subqueries.

Atas ialah kandungan terperinci Mengapakah ORDER BY Subquery MariaDB Saya Nampaknya Diabaikan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn