sql >> データベース >  >> RDS >> Oracle

betweenキーワードを使用すると、rownumは行を表示しません

    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から始まります。



    1. Access2016でテンプレートからデータベースを作成する方法

    2. SQLServerのログオントリガー

    3. Where句内のIfステートメント

    4. T-SQLで重複スペースを単一スペースに置き換えます