MySQL/MariaDB 子查询 ORDER BY 行为
在 5.5 之前的 MySQL 版本中,子查询中的 ORDER BY 子句按预期应用。但是,在 MariaDB 的最新版本(例如 10.0.14)中,当未指定 LIMIT 子句时,ORDER BY 子句不会应用于子查询内部。
错误或行为更改?
调查此问题后,确认此行为是有意为之,而不是错误。 MariaDB 遵循 SQL 标准,该标准不要求子查询中的行具有特定的顺序。因此,子查询内部会忽略 ORDER BY 子句。
已记录的行为
根据 MariaDB 文档,建议将 ORDER BY 子句应用于最外层查询或添加 LIMIT 子句以强制执行排序子查询。
示例
以下查询演示了行为上的差异:
SELECT t2.Code FROM ( SELECT Country.Code FROM Country ORDER BY Country.Code DESC ) AS t2;
如果没有 LIMIT 子句,MariaDB 将不会应用 ORDER子查询内的 BY 子句,导致结果无序。要强制降序,可以添加 LIMIT 子句:
SELECT t2.Code FROM ( SELECT Country.Code FROM Country ORDER BY Country.Code DESC LIMIT 2 ) AS t2;
通过添加 LIMIT 子句,ORDER BY 子句将应用于子查询中,从而得到正确的降序结果。
注意
需要注意的是,此行为更改也可能影响 MySQL 版本以外的版本5.5.请务必查阅官方文档或发行说明,以确认您正在使用的版本的具体行为。
以上是为什么我的 MariaDB 子查询忽略没有'LIMIT”的'ORDER BY”?的详细内容。更多信息请关注PHP中文网其他相关文章!