MySQL/MariaDB:更改子查詢中ORDER BY 的行為
考慮以下查詢,之前在MySQL 5.5 中成功使用:
SELECT t2.Code from (select Country.Code from Country order by Country.Code desc ) AS t2;
在最新版本的MySQL(包括MariaDB 10.0.14),此查詢不再如預期依降序對結果進行排序。這種行為變化引起了人們對潛在錯誤的擔憂。
但是,經過調查,已確認這種變化是故意的,不被視為錯誤。 MariaDB 已記錄了此行為,解釋了子查詢傳回一組無序的行,而子查詢中的 ORDER BY 子句可能會被忽略。
為了確保所需的順序,建議應用ORDER BY 子句到最外面的查詢,或者如有必要,向子查詢添加LIMIT 子句:
SELECT t2.Code FROM ( SELECT Country.Code FROM Country ORDER BY Country.Code DESC LIMIT 2 ) AS t2;
此修改後的查詢正確應用排序並產生所需的結果
請注意,根據原始錯誤報告的評論,這種行為變化也適用於MySQL 5.6。開發人員應該意識到這項變更並相應地調整他們的查詢以維持所需的排序行為。
以上是為什麼 MySQL/MariaDB 子查詢中的「ORDER BY」子句不再運作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!