首页 > 数据库 > mysql教程 > 为什么我的 MariaDB 子查询的 ORDER BY 子句似乎被忽略?

为什么我的 MariaDB 子查询的 ORDER BY 子句似乎被忽略?

Susan Sarandon
发布: 2025-01-03 18:02:39
原创
563 人浏览过

Why Does My MariaDB Subquery's ORDER BY Clause Seem to Be Ignored?

MySQL/MariaDB:按子查询排序差异

在 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 中的行为

虽然目前无法进行具体测试,但错误报告上的评论表明 MySQL 5.6 也可能表现出与 MariaDB 10.0.14 相同的行为,忽略子查询中的 ORDER BY 子句。

以上是为什么我的 MariaDB 子查询的 ORDER BY 子句似乎被忽略?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板