首页 >数据库 >mysql教程 >为什么 MySQL/MariaDB 子查询中的'ORDER BY”子句不再起作用?

为什么 MySQL/MariaDB 子查询中的'ORDER BY”子句不再起作用?

Patricia Arquette
Patricia Arquette原创
2025-01-03 16:22:42138浏览

Why Does My `ORDER BY` Clause in a MySQL/MariaDB Subquery No Longer Work?

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn