Разъяснение по "rownum" - PullRequest
       5

Разъяснение по "rownum"

1 голос
/ 28 января 2011

У меня есть таблица Table1


<b>Name     Date<br></b>
A        01-jun-2010<br>
B        03-dec-2010<br>
C        12-may-2010<br>

Когда я запрашиваю эту таблицу с помощью следующего запроса

select * from table1 where rownum=1

я получаю вывод как

<b>Name       Date<br></b>
A          01-jun-2010<br>

Но втаким же образом, когда я использую следующие запросы, я не получаю никакого вывода.

select * from table1 where rownum=2
select * from table1 where rownum=3

Кто-то, пожалуйста, дайте мне руководство, почему это так работает, и как использовать rownum.

Ответы [ 3 ]

4 голосов
/ 28 января 2011

У Тома есть ответ на многие вопросы, связанные с Oracle

Короче говоря, rownum доступен после применения условия where и до применения порядка order by.

В случае RowNum = 2 предикат в предложении where никогда не будет иметь значение true, поскольку RowNum начинается с 1 и увеличивается только в том случае, если можно найти записи, соответствующие предикату.

2 голосов
/ 28 января 2011

Добавление rownums - одно из последних действий, выполненных после извлечения набора результатов из базы данных.Это означает, что в первой строке всегда будет rownum 1. Rownum лучше использовать, когда вы хотите ограничить результирующий набор, например, при выполнении подкачки.

См. Это подробнее: http://www.orafaq.com/wiki/ROWNUM

2 голосов
/ 28 января 2011

(ни в коем случае не эксперт Oracle)

Насколько я понимаю, rownum нумерует строки в наборе результатов .

Итак, в вашем примере:

select * from table1 where rownum=2

Сколько строк будет в наборе результатов?Следовательно, какой rownum будет назначен на такой ряд?Теперь вы понимаете, почему результат на самом деле не возвращается?

В общем, вам следует избегать использования rownum или любых функций, которые подразумевают порядок результатов.Попробуйте подумать о работе со всем набором результатов.

С учетом сказанного, я считаю, что будет работать следующее:

select * from (select rownum as rn,table1.* from table1) as t where t.rn = 2

Поскольку в этом случае вы нумеруете строкив подзапросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...