Oracle Rownum beginnt bei 1, sodass Sie niemals die erste Rownum erhalten, wenn Sie between 2 and N
sagen .
Es ist eine Zeile erforderlich, um die Rownum-Pseudospaltensequenz zu "initiieren". Wenn Sie also Rownum 1 in Ihren Kriterien eliminieren, eliminieren Sie alle Rownums (oder jede Zeile hat im Wesentlichen Rownum 0
). ).
Betrachten Sie es so. Sie erhalten keine ROWNUM, bis die Datenbank eine Zeile an Sie zurückgibt. Die erste Zeile aller Kriterien ist immer ROWNUM 1.
Nun, der Trick, den Sie verwenden können, besteht darin, eine Unterabfrage zu verwenden. Jede Unterabfrage hat ihre eigene Zeilennummer, und wenn Sie sie mit einem anderen Spaltennamen aliasieren, können Sie sie in äußeren Abfragen beibehalten und nach Belieben behandeln. Wenn Sie also das Paging einer Ergebnismenge implementieren möchten, würden Sie normalerweise rownum von inneren Ergebnissen als rownum_ zu einer äußeren Unterabfrage aliasieren, um sie mit BETWEEN.
zu begrenzenselect * from
(select t.*, rownum as rownum_ from t)
where rownum_ between 2 and 6
Beachten Sie jedoch, dass die äußere Ergebnismenge eine eigene Zeilennummer hat, also könnten Sie Folgendes tun:
select t2.*, rownum from
(select a, b, rownum as rownum_ from t) t2
where rownum_ between 2 and 6
Sie sehen rownum
Das Endergebnis beginnt immer noch bei 1, aber Ihr inneres Ergebnis wird rownum_
haben ab 2.