2014-10-10 48 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