Oracle ROWNUM начинается с 1, так что вы никогда не получите первый ROWNUM, если вы говорите between 2 and N
.
Требуется строка, чтобы «инициировать» последовательность псевдоколонны rownum, поэтому, устраняя rownum 1 в ваших критериях, вы удаляете все rownums (или каждая строка имеет, по существу, rownum 0
).
Посмотрите на это вот так. Вы не получаете ROWNUM, пока база данных не вернет вам строку. Первая строка любых критериев всегда будет ROWNUM 1.
Теперь трюк, который вы можете использовать, это использовать подзапрос. Каждый подзапрос будет иметь свой собственный rownum, и если вы добавите его в другое имя столбца, вы можете сохранить его во внешних запросах и обработать его, как вам нравится. Поэтому, если вы хотите реализовать подкачку результирующего набора, вы обычно будете псевдонимом rownum из внутренних результатов как rownum_ во внешний подзапрос, чтобы ограничить BETWEEN.
select * from
(select t.*, rownum as rownum_ from t)
where rownum_ between 2 and 6
Но обратите внимание, что внешний набор результатов будет иметь свой собственный ROWNUM, так что вы можете сделать:
select t2.*, rownum from
(select a, b, rownum as rownum_ from t) t2
where rownum_ between 2 and 6
Вы увидите rownum
на конечный результат по-прежнему начинается с 1, но ваш внутренний результат будет иметь rownum_
, начинающийся с 2.
mysql or oracle? и если mysql является 'rownum' именем столбца в таблице? –
@AbhikChakraborty это делается в oracle, rownum - ключевое слово в oracle – Smart003