【发布时间】:2014-12-05 18:26:21
【问题描述】:
如果我有下表:
CREATE TABLE `docs` (
`id` int(6) unsigned NOT NULL,
`rev` int(3) unsigned NOT NULL,
`content` varchar(200) NOT NULL,
--
PRIMARY KEY (`id`)
)
并执行以下查询:
select *
from (
select *
from docs
order by rev desc
) as `rows`
返回行的顺序会和内部查询的顺序一样吗?
一般来说,这可以保证吗?
【问题讨论】:
-
是的,顺序是一样的
-
@juergend 感谢您的回答,但这可以通过文档或其他任何方式确认吗?这对我来说似乎也很明显,但对我的回答的评论让我很感兴趣:stackoverflow.com/questions/7745609/… :)
-
我确信 int 3 和 int 6 不会像您认为的那样做!而且我不确定@juergen 是对的……但话又说回来,他通常是!
-
对于任何回答这个问题的人,请记住,UNION 中的内部 ORDER BY 可能会被优化掉!是的,我知道这是不同的,但仍然如此。此外,我认为 OP 要求“按照 SQL 规范”提供保证。我怀疑是否有这样的保证。
-
dev.mysql.com/doc/refman/5.0/en/union.html 说“如果 ORDER BY 出现在 SELECT 中没有 LIMIT,它会被优化掉,因为它无论如何都没有效果。”我在这里没有看到有问题的查询的这样的声明,但我不明白为什么它不能这样做。