- PR -

SLECT文について

1
投稿者投稿内容
いんてく
会議室デビュー日: 2007/03/28
投稿数: 2
投稿日時: 2007-03-28 13:56
はじめまして。
SQLの勉強をしているのですがどうにも分からなくなり先輩方の力を貸してほしく、投稿をしました。

環境:SQLServer2005 VS2005 ASP.NET C#

uriage_tbl
bumon_cd(キー)|bumon_name|kingaku
01 部門01 100
02       200

bumon_mst
bumon_cd(キー)|bumon_name
01 部門02
02 部門02

という感じでテーブルがあります。
uriage_tblにもbumon_nameがありますが、これは未入力もありえる(bumon_cdは必ずbumon_tblには存在する)
ので名称はbumon_mstから取って来る必要があります。
これを1回のSQLで下記のようにしたいのですが、どうもうまくいきません。
Selectのサブクエリーで取得しようにも結果が複数帰ってきてしまうので使えません。

bumon_cd|bumon_name|kingaku
01 部門01 100
02     部門02 200

のようにコードに対応した名称を別テーブルから取得するにはどのようにしたらいいでしょうか。
なお一度名称抜きで取得して、取得されたコードをキーにして名称を取得するというのも考えたのですが、2度SQLを走らせるのも処理的にどうかと思いまして、出来れば一度のSQLで取りたいと考えています。
よろしくお願い致します。
KOX
大ベテラン
会議室デビュー日: 2004/08/23
投稿数: 142
投稿日時: 2007-03-28 14:04
まずは、どんなSQLを書いて、どうダメだったのかを提示してみてください。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-03-28 14:08
引用:

件名:SLECT文について


SLECT文って何?

本題については外部結合のSELECT文でいいと思うが・・・
いんてく
会議室デビュー日: 2007/03/28
投稿数: 2
投稿日時: 2007-03-28 14:14
>>KOX様

select bumon_tbl.bumon_cd,
(select bumon_tbl.bumon_name from bumon_tbl,bumon_mst where
bumon_tbl.bumon_cd = bumon_mst.bumon_name)
from bumon_tbl

というSQLでやったのですがサブクエリーのところで怒られてしまいました。
またCASE文を使って判定させるのも考えましたが、部門コードの増減には動的に対応できないと考えあきらめました。
NAO
ぬし
会議室デビュー日: 2001/10/24
投稿数: 1256
お住まい・勤務地: 神奈川のはずれから東京の下町
投稿日時: 2007-03-28 14:20
こんにちは。

そういうときはまずサブクエリーでどういう結果が
帰ってくるか確認しましょう。

問題を解決するためには細分化が必要ですよ。
eternia
常連さん
会議室デビュー日: 2006/02/23
投稿数: 42
投稿日時: 2007-03-28 14:26
ぶさいくろうさんが仰られているように外部結合を使います。

select a.bumon_cd,b.bumon_name,a.kingaku
from uriage_tbl a left join bumon_mst b on a.bumon_cd = b.bumon_cd

のような感じでしょうか。
テーブルの結合の種類について調べてみてください。

#bumon_mstのbumon_nameが一緒なのは転記ミスでしょうか?^^;
#それともuriage_tblにbumon_nameがあったらそっちが優先なのかな?

--追記

ふと思ったんですが、どちらのテーブルもbumon_cdがキーなので
bumon_mstの必要性が無い気がするのですが。。。
(他にも記述していないキー項目があるのなら別ですけれども)

--追記オワリ

[ メッセージ編集済み 編集者: eternia 編集日時 2007-03-28 17:22 ]
KOX
大ベテラン
会議室デビュー日: 2004/08/23
投稿数: 142
投稿日時: 2007-03-28 16:58
はじめの内容では、
uriage_tblとbumon_mstの外部結合がうまくできていないと思い、
SQLを提示してくださいと書きました。
しかし2回目のSQLの内容では、
bumon_mstとbumon_tblの結合になっています。
uriage_tblについて書かれていないし、bumon_tblの項目も分かりません。

情報を整理して、何ができないかを明確にしてください。
1

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