Derby DB の SQL クエリで行 X から行 Y を選択するにはどうすればよいですか?
例えば:
- 行 15 ~ 30 を選択したいのですが、上位 15 行は選択したくありません。
- 行番号 30 から始まるすべての行を選択します。
LIMIT と ROWNUM を試しましたが、うまくいきません。ダービーでそれを行うにはどうすればよいですか?
FAQによると:
Derby は LIMIT 構文をサポートしていません。ただし、Derby 10.4 では ROW_NUMBER 関数が追加され、Derby 10.7 では OFFSET 節と FETCH 節が追加されました。
Derby は、JDBC を介した照会によって返される行数の制限もサポートしています。
<...>10.4.1.3 リリース以降、Derby は ROW_NUMBER 関数を使用した行数の制限もサポートしています。
<...>ROW_NUMBER 関数を使用して、オフセットで始まる限られた数の行を選択することもできます。例:
<...>
SELECT * FROM (
SELECT ROW_NUMBER() OVER() AS rownum, myLargeTable.*
FROM myLargeTable
) AS tmp
WHERE rownum > 200000 AND rownum <= 200005;
Derby 10.7 以降を使用している場合は、OFFSET 句と FETCH 句も使用できます。
SELECT * FROM T ORDER BY I
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY