Oracle rownum začíná na 1, takže nikdy nedostanete první rownum, pokud řeknete between 2 and N
.
„Spuštění“ pseudosloupcové sekvence rownum trvá jeden řádek, takže odstraněním rownum 1 ve vašich kritériích odstraníte všechna rownum (nebo každý řádek má v podstatě rownum 0
).
Podívejte se na to takhle. Nezískáte ROWNUM, dokud vám databáze nevrátí řádek. První řádek všech kritérií bude vždy ŘÁDEK 1.
Nyní trik, který můžete použít, je použít poddotaz. Každý poddotaz bude mít své vlastní číslo řádku, a pokud jej přiřadíte k jinému názvu sloupce, můžete jej zachovat do vnějších dotazů a zacházet s ním, jak chcete. Pokud tedy chcete implementovat stránkování sady výsledků, normálně byste alias rownum z vnitřních výsledků jako rownum_ k vnějšímu poddotazu omezili pomocí BETWEEN.
select * from
(select t.*, rownum as rownum_ from t)
where rownum_ between 2 and 6
Všimněte si však, že vnější sada výsledků bude mít své vlastní rownum, takže můžete udělat:
select t2.*, rownum from
(select a, b, rownum as rownum_ from t) t2
where rownum_ between 2 and 6
Zobrazí se rownum
na konečný výsledek stále začíná na 1, ale váš vnitřní výsledek bude mít rownum_
od 2.