2014-10-10 60 views
0

如果我有以下表中选择:MySQL的子查询,从订单

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` 

将返回行的顺序是一样的内部查询的顺序?

一般来说,这可以保证吗?

+0

是的,顺序是相同的 – 2014-10-10 14:36:33

+0

@juergend感谢的答案,但可以这样通过文档或任何以某种方式确认了吗?这对我来说似乎也很明显,但对我的答案的评论让我很感兴趣:http://stackoverflow.com/questions/7745609/sql-select-only-rows-with-max-value-on-a-column/24556626? noredirect = 1#answer-24556626 :) – Yura 2014-10-10 14:42:38

+0

我相信int 3和int 6不会做任何你认为他们做的事!我不确定@ juergen的权利......但是,他通常是! – Strawberry 2014-10-10 15:34:05

回答

2

是的,如果你只使用

select * 
from ( 
    select * 
    from docs 
    order by rev desc 
) as `rows` 

那么这将是与往常一样,但使用ORDER BY子查询中不应该做的事。在一些外部查询使用 子查询,而外部查询将不得不这样做反正订货,所以没有点订购子查询

如果在子查询中使用TOP或限制,则需要在子查询使用ORDER。但是,这不是标准的SQL

你应该使用这种方式

SELECT * 
FROM ( 
    SELECT * 
    FROM docs 
) AS `rows` ORDER BY rev DESC; 
+0

它应该完成的原因是解决'选择与最大值问题行'在下面的答案,如下所示:http://stackoverflow.com/questions/7745609/sql-select-only-rows-with-max- value-on-a-column/24556626?noredirect = 1#answer-24556626因此问题 – Yura 2014-10-10 15:01:47

+0

@yura没有在该线程接受的答案下提供的建议依赖于此'技术' – Strawberry 2014-10-10 15:39:17

+0

@Strawberry是的,这就是为什么我添加那个答案:) – Yura 2014-10-13 08:44:03