首頁 >資料庫 >mysql教程 >為什麼我的 MariaDB 子查詢的 ORDER BY 子句似乎被忽略?

為什麼我的 MariaDB 子查詢的 ORDER BY 子句似乎被忽略?

Susan Sarandon
Susan Sarandon原創
2025-01-03 18:02:39583瀏覽

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

MySQL/MariaDB:按子查詢排序差異

在 5.5 之前的 MySQL 版本中,子查詢遵循其中的 ORDER BY 子句。但是,這種行為在最近的版本中發生了變化,包括 MariaDB 10.0.14。

觀察到的問題

在MariaDB 10.0.14 中執行以下查詢時:

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

結果現在按升序(或按自然順序)排序,與預期的降序相反

調查

檢查MariaDB的文檔後,觀察到的行為不被視為錯誤。根據 SQL 標準,表格和子查詢是無序的行集。因此,最佳化器可能會選擇忽略子查詢內的 ORDER BY 子句。

建議解決方案

為保證結果排序一致,建議將ORDER BY 子句應用於外查詢:

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

或者,在子查詢中使用LIMIT 子句也可能會強制ORDER BY應用:

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

MySQL 5.6中的行為

雖然目前無法進行特定測試,但錯誤報告上的評論表明 MySQL 5.6 也可能表現出與 MariaDB 10.0.14 相同的行為,忽略子查詢中的 ORDER BY 子句。

以上是為什麼我的 MariaDB 子查詢的 ORDER BY 子句似乎被忽略?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn