我有以下简单的SQL,它是针对我的MariaDB数据库执行的。
预期的行为是结果按“天” ASCENDING 排序。但是,执行时,结果将按 DESCENDING 顺序排序。很奇怪。
SELECT *
FROM
(
SELECT `day`,`count`
FROM
(
SELECT
DATE(`date`) AS `day`,
COUNT(*) as `count`
FROM `message` m
GROUP BY DATE(`date`)
ORDER BY `day` DESC, `count` DESC
) AS q
ORDER BY `day` ASC
) AS q
如果我在内部查询中注释掉ORDER BY ,则外部ORDER BY可以正常工作,并以升序顺序对结果进行排序而不会出现问题。
我遇到的问题是内部循环中的代码是生成代码,因此我无法删除内部ORDER BY。
为什么MariaDB会以这种方式行事?有没有办法改变外部ORDER BY,以便获得优先权?
注意:我使用的是MariaDB版本:10.0.24-MariaDB
答案 0 :(得分:0)
所以,我把它解决了。
根据MariaDB,SQL标准不要求遵守子查询的ORDER BY(除非它会影响返回的实际行):
https://mariadb.com/kb/en/library/why-is-order-by-in-a-from-subquery-ignored/
如果我将ORDER BY移动到外部查询,那么它按预期工作。