在 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 也可能表現出與 MariaDB 10.0.14 相同的行為,忽略子查詢中的 ORDER BY 子句。
以上是為什麼我的 MariaDB 子查詢的 ORDER BY 子句似乎被忽略?的詳細內容。更多資訊請關注PHP中文網其他相關文章!