- PR -

条件を変えて複数のSQL文を一度に発行

投稿者投稿内容
タオル
常連さん
会議室デビュー日: 2005/04/27
投稿数: 43
投稿日時: 2005-10-18 19:02
C#でプログラムをしています。

select * from customer_MST where customerCode = '123'
select * from customer_MST where customerCode = '963'
select * from customer_MST where customerCode = '741'

と、同じテーブルで同じフィールドに対して条件を変えて複数のSQL文を
一度に発行し、結果をまとめてデータセットにしたいのですが、
↑の例の用にすると何度もDBにアクセスする事になるかと思います。

まだプログラミング初心者なのですが、
これはよくないと思い、
何か良い方法があればお教えいただきたいと思い、投稿させていただきました。

皆様の書き込みの中で最も低レベルな質問かと思いますが、
何卒よろしくお願いいたします。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2005-10-18 19:14
同一テーブルで条件が違うなら、結果のデータテーブルは1つでいいような気がするのですが、
どうしても、複数のデータテーブルを取得したいのでしょうか?

select * from customer_MST where customerCode in ('123', '963', '741')
えんぞ@?
ぬし
会議室デビュー日: 2004/07/06
投稿数: 271
お住まい・勤務地: はまっこ
投稿日時: 2005-10-18 19:18
過去投稿から推察するところ、.Netでしょうか?(データセット→DataSet?)
まずは使用している言語、又は環境等を(前提条件があれば)提示された方がよいですよ。
# なんとなく「Database Expert会議室」というよりは「Insider.NET会議室」の方が適切なような気が...します。(^^;


[ メッセージ編集済み 編集者: えんぞ@? 編集日時 2005-10-18 19:19 ]
でっち6号
大ベテラン
会議室デビュー日: 2005/01/31
投稿数: 176
お住まい・勤務地: Kawasaki
投稿日時: 2005-10-18 19:28
こんにちは、でっちです。

burton999さんがINを使う方法を書かれているので、あと一つORを使う方も書いておきますね。

select * from customer_MST
where customerCode = '123'
or customerCode = '963'
or customerCode = '741'

単純にSQLについての質問のように見受けられました。
@ITで言えばSQL実践講座等は初級者向きで分りやすいと思いますので、ぜひご一読下さい。

また、参考書籍なども書かれているので、こちらのスレもご覧下さい。
SQLを質問される方へのアドバイス
さる
ぬし
会議室デビュー日: 2005/07/14
投稿数: 276
お住まい・勤務地: 実家戻ったw
投稿日時: 2005-10-18 19:41
もっと条件が複雑な場合にはUNIONって手もありますね。
タオル
常連さん
会議室デビュー日: 2005/04/27
投稿数: 43
投稿日時: 2005-10-19 10:16
皆様、ご回答ありがとうございます。

自分自身、書き込んでいて「こんな意味不明な文章で通じるのか」という
疑問を持っていましたが、情報をほとんど提示していないにもかかわらず、
私の求める考え方をお教えいただき、誠に感謝しております。
burton999さんがご提示くださった、
select * from customer_MST where customerCode in ('123', '963', '741')
の方式でやってみたいと思います。
頑張って私も皆様のレベルに達したいと思いました。(何年後でしょうか。。)

さて、私の質問はまさに、でっち6号さんがおっしゃるように、
「単純にSQLについての質問」かと思います。
スレ違い甚だしいのにもかかわらず、丁寧にご対応いただき、うれしい限りです。
(今後は、書き込む場所をしっかりと考えます。)
ただ、よろしければもう少しだけ質問させていただいてよろしいでしょうか?
以下に質問を貼り付けますので、もし「他の場所に書き込むべき」とのご指摘があれば
すぐに移動いたします。

環境:VS.NET2003とSQLSERVER2000です。C#で開発を始めました。
質問:
select * from customer_MST where customerCode in ('123', '963', '741')
というSQL文でcustomer_MSTのcustomerCodeが123、963、741のレコードを取得できるようになりました。
ただ、以前質問させていただいた際にはテーブルが一つだったのですが、
今回、二つテーブルが追加になりました。
合計3つのテーブルで上記の結果を求めたいです。
それぞれのテーブルにはcustomerCodeがあるので、
これを抽出条件にできればと考えました。
customer_MST.customerCode
test_MST.customerCode
set_MST.customerCode
以前burton999さんにお教えいただいたSQL文、
select * from customer_MST where customerCode in ('123', '963', '741')
の条件部分を以下のように変更してみました。

select
*
from
customer_MST,
test_MST,
set_MST

where
customer_MST.customerCode in ('123', '963', '741')
and
test_MST.customerCode in ('123', '963', '741')
and
set_MST.customerCode in ('123', '963', '741')

order by customer_MST.customerCode

これで取得すると、エラーにはならないのですが、
customerCodeが重複して取得してしまいます。
(同じcustomerCodeでもあるフィールドの値が違ったり(そのような値に覚えはないのに))

in ('123', '963', '741')の部分を
in ('123')としますと、私の考えどおり、1レコードのみを取得できます。

取り留めの無いお話ですが、どうにかしてやり遂げると決めています。
更に低レベルで、このような有名な掲示板で相談するのは
とてもおこがましいですが、周りに相談できる方がいらっしゃらず、
相談させていただきました。

何卒何卒、お力をお貸しください!!!

何か上記文章内で、問題があればご指摘ください!
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-19 10:28
同じ構造のテーブルならば UNION ALL とか使っちゃ駄目なんでしょうか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2005-10-19 10:34
引用:

タオルさんの書き込み (2005-10-19 10:16) より:
select
*
from
customer_MST,
test_MST,
set_MST

where
customer_MST.customerCode in ('123', '963', '741')
and
test_MST.customerCode in ('123', '963', '741')
and
set_MST.customerCode in ('123', '963', '741')

order by customer_MST.customerCode



customer_MST test_MST set_MST
の結合条件はないのですか?
#直積がほしいのです?

こんな感じでは?と思ったのですが・・・。
customer_MST.customerCode = test_MST.customerCode and
test_MST.customerCode = set_MST.customerCode and
customer_MST.customerCode in ('123', '963', '741')

とかでは要件は満たせないでしょうか?

[ メッセージ編集済み 編集者: 夏椰【SUICA】 編集日時 2005-10-19 10:36 ]

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