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
Lepaskan: 2024-12-30 18:41:09
asal
172 orang telah melayarinya

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;
Salin selepas log masuk

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;
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan