4

次の 2 つの SQL ステートメントのうち、目的の結果セット(つまり、Status=0 で StartTimes が最も高い 10 行) を返すのはどれですか?

両方のステートメントは常に同じ結果セットを返しますか (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 行に制限し、それらのランダムな行を StartTime で並べ替えると言っていましたが、これは明らかに私が望んでいるものではありません。その回答で学んだことから、2番目のステートメントの order by 句は冗長であり、オプティマイザーによって削除される可能性がありますが、これも私が望んでいるものではありません。


SQLite データベースへのクエリの句に関して同様の質問をしましたが、Oracle データベースで使用されるlimit上記のステートメント ( limitVsを使用rownum) との違いを理解することに興味があります。

4

1 に答える 1

4

2番目のクエリが機能します

最初の場合、ステータス 0 の最初の 10 行が選択され、次に順序付けが行われるため、フェッチされた最初の 10 行は最上位である必要はありません。

于 2012-05-03T12:27:33.413 に答える