Вопрос по sql – Использование rownum в SQL-выражении Oracle в сочетании с предложением order by

4

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) используется с оракулом дБ.

а второму понадобится псевдоним. ypercubeᵀᴹ
В этих обстоятельствах оптимизатор Oracle не будет удалять заказ по предложению David Aldridge
Связанные с:How to select the nth row in a SQL database table? ypercubeᵀᴹ
Первый запрос не анализируетс. Вы можете отредактировать свой вопрос. Phil
Извините за ошибки. Я исправил и проверил утверждение один против нашей базы данных. Второе утверждение должно быть синтаксически правильным. nabulke

Ваш Ответ

1   ответ
4

Поскольку в первой выбраны первые десять строк с состоянием 0, а затем выполняется порядок, в этом случае первые десять выбранных строк не обязательно должны быть в верхнем порядке.

Похожие вопросы