Oracle rownum börjar på 1, så du får aldrig det första rownum om du säger between 2 and N
.
Det krävs en rad för att "initiera" rownum-pseudokolumnsekvensen, så genom att eliminera radnummer 1 i dina kriterier eliminerar du alla radnummer (eller varje rad har i princip radnummer 0
).
Titta på det så här. Du får inte ett ROWNUM förrän databasen returnerar en rad till dig. Den första raden i alla kriterier kommer alltid att vara ROWNUM 1.
Nu är tricket du kan använda att använda en underfråga. Varje underfråga kommer att ha sitt eget radnummer, och om du aliasar det till ett annat kolumnnamn kan du bevara det i yttre frågor och behandla det som du vill. Så om du funderar på att implementera sökning av en resultatuppsättning, skulle du normalt alias rownum från inre resultat som rownum_ till en yttre underfråga för att begränsa med BETWEEN.
select * from
(select t.*, rownum as rownum_ from t)
where rownum_ between 2 and 6
Men observera att den yttre resultatuppsättningen kommer att ha sitt eget radnummer, så du kan göra:
select t2.*, rownum from
(select a, b, rownum as rownum_ from t) t2
where rownum_ between 2 and 6
Du kommer att se rownum
på slutresultatet börjar fortfarande på 1, men ditt inre resultat kommer att ha rownum_
från 2.