- - PR -
SLECT文について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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で取りたいと考えています。 よろしくお願い致します。 | ||||
|
投稿日時: 2007-03-28 14:04
まずは、どんなSQLを書いて、どうダメだったのかを提示してみてください。
| ||||
|
投稿日時: 2007-03-28 14:08
SLECT文って何? 本題については外部結合のSELECT文でいいと思うが・・・ | ||||
|
投稿日時: 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文を使って判定させるのも考えましたが、部門コードの増減には動的に対応できないと考えあきらめました。 | ||||
|
投稿日時: 2007-03-28 14:20
こんにちは。
そういうときはまずサブクエリーでどういう結果が 帰ってくるか確認しましょう。 問題を解決するためには細分化が必要ですよ。 | ||||
|
投稿日時: 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 ] | ||||
|
投稿日時: 2007-03-28 16:58
はじめの内容では、
uriage_tblとbumon_mstの外部結合がうまくできていないと思い、 SQLを提示してくださいと書きました。 しかし2回目のSQLの内容では、 bumon_mstとbumon_tblの結合になっています。 uriage_tblについて書かれていないし、bumon_tblの項目も分かりません。 情報を整理して、何ができないかを明確にしてください。 |
1