• ベストアンサー

任意の件数の取得

検索条件にマッチしたレコードのセットのうち、任意の件数、例えば1から100件、101から200件とか、取得する方法というのはありますか? DBはDB2です。 オラクルではあった気がするのですが、DB2は?と思っています。 もっと言うと、実装はHibernateを使用してアクセスしているので、Hibernateでそのような取得方法があるのならそれも教えていただきたいと思っています。 よろしくお願いします。 (ソートして連番ふるviewでも作ればいいのかな…などとも思っています。どうなんでしょ?)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

DB2では、MySQLやPostgreSQLでサポートされているLIMITやOFFSETを実装していません。 しかし、ORACLEと同様に代替機能があります。 ●1件目からn件目のみの取り出す  FETCH FITRST n ROWS ONLY節をSELECT文の最後に付ける。 例)先頭から3行のみ取り出し SELECT * FROM t1 ORDER BY c1 FETCH FIRST 3 ROWS ONLY ●m行目からn行目を取り出す OLAP関数のROWNUMBER()とoverを使用して結果セットに番号を振り、その番号を利用して取り出す。 例)11番目から20行を取り出す SELECT t.c1,t.c2 FROM (SELECT c1,c2,ROWNUMBER() OVER (ORDER BY c2) AS rownum FROM t1) AS t WHERE rownum BETWEEN 11 AND 20 ORDER BY rownum

arakororin
質問者

お礼

ぜんぜん知らない機能でした。 こんな書き方があるのですね。 大変参考になりました。ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

noname#182251
noname#182251
回答No.1

DB2は判りませんがSQL文としては下記のようなものでいかがでしょうか?フリガナが ア~ソ で 11番~20番を選択しています。 SELECT (SELECT Count(*)+1 FROM 住所録 WHERE 住所録.氏名フリガナ<S.氏名フリガナ and (住所録.氏名フリガナ)>="ア" And (住所録.氏名フリガナ)<"ン") AS 式1, S.氏名, S.氏名フリガナ FROM 住所録 AS S WHERE ((((SELECT Count(*)+1 FROM 住所録 WHERE 住所録.氏名フリガナ<S.氏名フリガナ and (住所録.氏名フリガナ)>="ア" And (住所録.氏名フリガナ)<"タ"))>10 And ((SELECT Count(*)+1 FROM 住所録 WHERE 住所録.氏名フリガナ<S.氏名フリガナ and (住所録.氏名フリガナ)>="ア" And (住所録.氏名フリガナ)<"ン"))<21) AND ((S.氏名フリガナ)>="ア" And (S.氏名フリガナ)<"タ"));

arakororin
質問者

お礼

なんかすごいSQL文ですね…。 とにかくこんな感じでもしなければ実現できないということですよね。分かりました。 ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A