こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

任意の件数の取得

検索条件にマッチしたレコードのセットのうち、任意の件数、例えば1から100件、101から200件とか、取得する方法というのはありますか?

DBはDB2です。

オラクルではあった気がするのですが、DB2は?と思っています。

もっと言うと、実装はHibernateを使用してアクセスしているので、Hibernateでそのような取得方法があるのならそれも教えていただきたいと思っています。

よろしくお願いします。

(ソートして連番ふるviewでも作ればいいのかな…などとも思っています。どうなんでしょ?)

投稿日時 - 2006-01-15 15:31:15

QNo.1897825

困ってます

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

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

投稿日時 - 2006-01-16 08:50:25

お礼

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

投稿日時 - 2006-01-25 12:52:42

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

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.氏名フリガナ)<"タ"));

投稿日時 - 2006-01-16 05:54:58

お礼

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

投稿日時 - 2006-01-25 12:50:43

あなたにオススメの質問