- PR -

指定した範囲を取得するには?

1
投稿者投稿内容
ケイ
大ベテラン
会議室デビュー日: 2004/04/20
投稿数: 100
投稿日時: 2005-07-11 10:51
VB6.0+MSDEで開発を行ってます。

あるテーブルから空番を取得する為、今色々と試行錯誤中なのですが、
下記のような結果を取得する為のSQL文はないでしょうか?

select 1000
上記のSQL文からは、下記の結果が取得できます。
(列名なし)
---------
1000

しかし、私は1000〜2000までの行を取得したいのです。

(列名なし)
----------
1000
1001
1002
〜中略〜
1999
2000

上記のように取得したいのですが、
どのようなSQL文で、可能でしょうか?

お分かりの方は教えて下さい。お願いします。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-07-11 11:41
引用:

ケイさんの書き込み (2005-07-11 10:51) より:
あるテーブルから空番を取得する為、今色々と試行錯誤中なのですが、


別に空番号を管理するためのテーブルやフィールドを設けるのが定石。

引用:

しかし、私は1000〜2000までの行を取得したいのです。


一文でシーケンス番号を生成できるSQL文って言うのはたぶん無いです。TransaceSQLとかVBでコードを書くしか無いんじゃないかな。番号の一覧を作った後、NOT INあたりで空き番号をリストアップするつもりなんだろうけど、それってパフォーマンス的にも苦しいんじゃない?
ケイ
大ベテラン
会議室デビュー日: 2004/04/20
投稿数: 100
投稿日時: 2005-07-11 13:22
引用:

甕星さんの書き込み (2005-07-11 11:41) より:
一文でシーケンス番号を生成できるSQL文って言うのはたぶん無いです。TransaceSQLとかVBでコードを書くしか無いんじゃないかな。番号の一覧を作った後、NOT INあたりで空き番号をリストアップするつもりなんだろうけど、それってパフォーマンス的にも苦しいんじゃない?



そうですか、やっぱり無理ですかね・・・・

現状は、下記のような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テーブルと連結して、不一致データから空番を簡単に取得できるかと
思ったのですが・・・・

他に効率のいい方法がありましたら、意見をお聞かせ下さい。
お願いします。
kanai
ベテラン
会議室デビュー日: 2004/09/13
投稿数: 98
投稿日時: 2005-07-11 16:23
適当なテーブルを作って連番を片っ端から登録しておき、

SELECT CODE FROM DUMMY_TABLE WHERE CODE BETWEEN 1000 AND 2000

とすれば、とりあえず1000〜2000のレコードを取得することはできます。
(が、これと結合してパフォーマンス的によいかは分かりません)
また、連番をどのくらい登録しておけば十分なのか、事前に調査が必要です。
ケイ
大ベテラン
会議室デビュー日: 2004/04/20
投稿数: 100
投稿日時: 2005-07-11 17:23
引用:

kanaiさんの書き込み (2005-07-11 16:23) より:
適当なテーブルを作って連番を片っ端から登録しておく。
〜中略〜
また、連番をどのくらい登録しておけば十分なのか、事前に調査が必要です。



返信ありがとうございます。

連番テーブルを用意する。
これについては、事前登録の件数(1〜999999で登録されるので)を考えると、
出来れば避けたいです。

ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2005-07-11 17:43
空番取得用なら元レコードのコードを+1したものと連結すればどうでしょうか?
先頭だけは別判断になりますが

コード:
tes1.code tes1.code+1
1000    
1001   1001
     1002 <-- tes1.codeが空のものが空き
1003   
1004   1004


ケイ
大ベテラン
会議室デビュー日: 2004/04/20
投稿数: 100
投稿日時: 2005-07-12 08:58
引用:

ゆうじゅんさんの書き込み (2005-07-11 17:43) より:
空番取得用なら元レコードのコードを+1したものと連結すればどうでしょうか?
先頭だけは別判断になりますが


返信ありがとうございます。

なるほど!!
これはいいですね。
先頭の問題を解決すれば、自分が今やってる、番号を無理に作るのより
いいですね!。

ありがとうございます。
1

スキルアップ/キャリアアップ(JOB@IT)