Oracle rownum започва от 1, така че никога няма да получите първия rownum, ако кажете between 2 and N
.
Необходим е ред, за да "инициира" псевдоколона на rownum, така че чрез елиминиране на rownum 1 във вашите критерии, вие елиминирате всички rownums (или всеки ред по същество има rownum 0
).
Погледнете го така. Не получавате ROWNUM, докато базата данни не ви върне ред. Първият ред от всеки критерий винаги ще бъде ROWNUM 1.
Сега, трикът, който можете да използвате, е да използвате подзаявка. Всяка подзаявка ще има свой собствен номер на ред и ако я присвоите на друго име на колона, можете да я запазите във външни заявки и да я третирате както желаете. Така че, ако искате да внедрите пейджинг на набор от резултати, обикновено бихте направили псевдоним rownum от вътрешни резултати като rownum_ към външна подзаявка, за да ограничите с BETWEEN.
select * from
(select t.*, rownum as rownum_ from t)
where rownum_ between 2 and 6
Но имайте предвид, че външният набор от резултати ще има свой собствен номер на ред, така че можете да направите:
select t2.*, rownum from
(select a, b, rownum as rownum_ from t) t2
where rownum_ between 2 and 6
Ще видите rownum
на крайния резултат все още започва от 1, но вашият вътрешен резултат ще има rownum_
от 2.