Oracleのrownumは1から始まるため、between 2 and N
と言った場合、最初のrownumを取得することはありません。 。
rownum疑似列シーケンスを「開始」するには行が必要です。したがって、条件でrownum 1を削除することにより、すべてのrownumを削除します(または、すべての行に基本的にrownum 0
があります。 。
このように見てください。データベースが行を返すまで、ROWNUMは取得されません。基準の最初の行は常にROWNUM1になります。
ここで、使用できるトリックはサブクエリを使用することです。各サブクエリには独自のrownumがあり、別の列名にエイリアスを設定すると、外部クエリに保存して、好きなように扱うことができます。したがって、結果セットのページングを実装する場合は、通常、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から始まります。