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中文网其他相关文章!