栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

MySQL / MariaDB-通过内部子查询排序

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MySQL / MariaDB-通过内部子查询排序

经过一点挖掘,我可以确认您的两种情况:

MySQL 5.1确实

ORDER BY
在子查询中应用了内部。

如果未提供,则Linux上的MariaDB 5.5.39 不会 应用

ORDER BY
内部子查询
LIMIT
。但是,当给出相应的命令时,它
正确应用订单
LIMIT

SELECt t2.Code FROM (  SELECt Country.Code FROM Country ORDER BY Country.Code DESC LIMIT 2) AS t2;

如果没有

LIMIT
,没有一个很好的理由来应用子查询中的排序。它可以等效地应用于外部查询。

记录的行为:

事实证明,MariaDB已记录了此行为,并且不将其视为错误:

FROM
根据SQL标准,“表”(子句中也包含子查询)是无序的行集。表(或
FROM
子句中的子查询)中的行不按任何特定顺序排列。这就是为什么优化器可以忽略
ORDERBY
您指定的子句的原因。实际上,SQL标准甚至不允许
ORDER BY
子句出现在该子查询中(我们允许它,因为
ORDER BY ...LIMIT
…更改了结果,行的集合,而不仅仅是行的顺序)。

您需要将

FROM
子句中的子查询视为一组未指定且未定义的行,并将其
ORDER BY
放在顶层
SELECT

因此,MariaDB还建议

ORDER BY
在最外面的查询中应用,或
LIMIT
在必要时应用。

注意:我目前无法访问适当的MySQL
5.5或5.6,以确认那里的行为是否相同(并且SQLFiddle.com出现故障)。对原始错误报告的评论(以非错误关闭)表明MySQL
5.6的行为方式可能与MariaDB相同。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/416460.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号