在 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 也可能表现出与 MariaDB 10.0.14 相同的行为,忽略子查询中的 ORDER BY 子句。
以上是为什么我的 MariaDB 子查询的 ORDER BY 子句似乎被忽略?的详细内容。更多信息请关注PHP中文网其他相关文章!