MySQL/MariaDB 子查詢ORDER BY 行為
在5.5 之前的MySQL 版本中,子查詢中的ORDER BY 子句按預期應用。但是,在 MariaDB 的最新版本(例如 10.0.14)中,當未指定 LIMIT 子句時,ORDER BY 子句不會套用於子查詢內部。
錯誤或行為改變?
調查此問題後,確認此行為是有意為之,而不是錯誤。 MariaDB 遵循 SQL 標準,該標準不要求子查詢中的行具有特定的順序。因此,子查詢內部會忽略 ORDER BY 子句。
已記錄的行為
根據 MariaDB 文檔,建議將 ORDER BY 子句應用於最外層查詢或新增 LIMIT 子句以強制執行排序子查詢。
範例
以下查詢示範了行為上的差異:
如果沒有LIMIT 子句,MariaDB 將不會應用ORDER子查詢內的BY 子句,導致結果無序。要強制降序,可以加入 LIMIT 子句:
透過新增 LIMIT 子句,ORDER BY 子句將應用於子查詢中,從而得到正確的降序結果。
注意
需要注意的是,此行為變更也可能影響MySQL 版本以外的版本5.5.請務必查閱官方文件或發行說明,以確認您正在使用的版本的具體行為。
以上是為什麼我的 MariaDB 子查詢忽略沒有「LIMIT」的「ORDER BY」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!