- - PR -
指定した範囲を取得するには?
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-07-11 10:51
VB6.0+MSDEで開発を行ってます。
あるテーブルから空番を取得する為、今色々と試行錯誤中なのですが、 下記のような結果を取得する為のSQL文はないでしょうか? select 1000 上記のSQL文からは、下記の結果が取得できます。 (列名なし) --------- 1000 しかし、私は1000〜2000までの行を取得したいのです。 (列名なし) ---------- 1000 1001 1002 〜中略〜 1999 2000 上記のように取得したいのですが、 どのようなSQL文で、可能でしょうか? お分かりの方は教えて下さい。お願いします。 | ||||||||
|
投稿日時: 2005-07-11 11:41
別に空番号を管理するためのテーブルやフィールドを設けるのが定石。
一文でシーケンス番号を生成できるSQL文って言うのはたぶん無いです。TransaceSQLとかVBでコードを書くしか無いんじゃないかな。番号の一覧を作った後、NOT INあたりで空き番号をリストアップするつもりなんだろうけど、それってパフォーマンス的にも苦しいんじゃない? | ||||||||
|
投稿日時: 2005-07-11 13:22
そうですか、やっぱり無理ですかね・・・・ 現状は、下記のようなSQL文で、空番を取得しています。 create table tes1(code INT ,name Varchar(20)) select Top 1 番号,code From ( select count(a.code) as 番号,a.code from (select code from tes1)a, (select code from tes1)b where 1= 1 and a.code>=b.code group by a.code) c where 番号 <> code 上記のselect文で、番号を振り、 code列の値と一致しない場合、番号は空番号になります。 上記ですと、テーブルに登録されている行が大量であればあるほど、 結果の戻りが遅くなってしまうので、 1000〜2000を下記のように取得できるようなSQL文があれば、 (列名なし) ---------- 1000 1001 1002 〜中略〜 1999 2000 tes1テーブルと連結して、不一致データから空番を簡単に取得できるかと 思ったのですが・・・・ 他に効率のいい方法がありましたら、意見をお聞かせ下さい。 お願いします。 | ||||||||
|
投稿日時: 2005-07-11 16:23
適当なテーブルを作って連番を片っ端から登録しておき、
SELECT CODE FROM DUMMY_TABLE WHERE CODE BETWEEN 1000 AND 2000 とすれば、とりあえず1000〜2000のレコードを取得することはできます。 (が、これと結合してパフォーマンス的によいかは分かりません) また、連番をどのくらい登録しておけば十分なのか、事前に調査が必要です。 | ||||||||
|
投稿日時: 2005-07-11 17:23
返信ありがとうございます。 連番テーブルを用意する。 これについては、事前登録の件数(1〜999999で登録されるので)を考えると、 出来れば避けたいです。 | ||||||||
|
投稿日時: 2005-07-11 17:43
空番取得用なら元レコードのコードを+1したものと連結すればどうでしょうか?
先頭だけは別判断になりますが
| ||||||||
|
投稿日時: 2005-07-12 08:58
返信ありがとうございます。 なるほど!! これはいいですね。 先頭の問題を解決すれば、自分が今やってる、番号を無理に作るのより いいですね!。 ありがとうございます。 |
1