Rumah >pangkalan data >tutorial mysql >Mengapa Subquery MariaDB Saya Mengabaikan `PESANAN OLEH` Tanpa `HAD`?

Mengapa Subquery MariaDB Saya Mengabaikan `PESANAN OLEH` Tanpa `HAD`?

Barbara Streisand
Barbara Streisandasal
2024-12-30 18:41:09176semak imbas

Why Does My MariaDB Subquery Ignore `ORDER BY` Without `LIMIT`?

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!

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