Oracleでページング。ORDER BYが邪魔してくる。
WHERE ROWNUM BETWEEN 11 AND 20という風に単純には出来ないよう。
こちらを参考に元のSQLをラッピングする形にした。
select *
from
(select
rownum as row_id, TABLAの項目名羅列
from TABLE名
where 条件
order by ソート順序)where
row_id between 11 and 20
結果を見てみると、元のSQLの結果と違う部分が10件抽出されている。
ROWNUMを見てみると、ソートの前にナンバリングされていて、それに対してBETWEENされているらしい。
ROWNUMよりROW_NUMBER() - A Day In The Life
こちらを参考に、ROW_NUMBER()を使用してORDER BY後にナンバリングするように変更しました。
select *
from
(select
row_number() over(
order by ソート順序) as row_id, TABLAの項目名羅列
from TABLE名
where 条件
order by ソート順序)where
row_id between 11 and 20
(order byが二つあるのはいいのかしら・・・)
これでSQLを変更する前の11番目から20番目のデータを抽出できるようになりました。
ありがとうございます。