Использование rownum в SQL-выражении Oracle в сочетании с предложением order by
Which of the following two SQL statements will return the desired result set (т. е. десять строк с Status = 0 и самыми высокими значениями StartTimes)?
Will both statements always return the same result set (StartTime уникален)?
<code>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 </code>
Background
Мой DBAdmin сказал мне, что первое утверждение будетfirst ограничить таблицу до 10 строк, а затем упорядочить эти случайные строки по StartTime, что определенно не то, что я хочу. Из того, что я узнал вэтот ответусловие order by второго оператора является избыточным и может быть удалено оптимизатором, что тоже не то, что я хочу.
Я спросиланалогичный вопрос Принимаяlimit
предложение в запросе к базе данных SQLite, и я заинтересован в понимании любых различий с вышеуказанными утверждениями (используяlimit
Vsrownum
) используется с оракулом дБ.