2012-05-03 88 views
4

以下兩個SQL語句中的哪一個將返回所需的結果集(即Status = 0且StartTime最高的十個行)?在oracle SQL語句中使用rownum並結合order by子句

這兩個語句是否總是返回相同的結果集(StartTime是唯一的)?

SELECT * 
FROM MyTable 
WHERE Status=0 
AND ROWNUM <= 10 
ORDER BY StartTime DESC 

SELECT * 
FROM (
    SELECT * 
    FROM MyTable 
    WHERE Status=0 
    ORDER BY StartTime DESC 
) 
WHERE ROWNUM <= 10 

背景

我DBAdmin跟我說的第一個語句將第一限制表10行,不是爲了通過開始時間,這是definitly不是我想要的那些隨意行。 根據我在that answer中所瞭解到的,第二個語句的order by子句是多餘的,可以通過優化器刪除,這也不是我想要的。


我問一個similar question在查詢中limit條款concering到SQLite數據庫和我有興趣瞭解上述聲明的任何差異(使用limit Vs的rownum)與Oracle數據庫使用。

+0

第一個查詢甚至沒有解析。你可能想編輯你的問題。 – Phil

+0

第二個將需要一個別名。 –

+0

對不起。我對我們的數據庫進行了修正和驗證。第二個陳述應該在語法上是正確的。 – nabulke

回答

4

因爲第一,前十行與狀態0被選中,然後在這種情況下被完成的順序將前十行取不需要在最高位

你的第二個查詢將工作