- ベストアンサー
結合のSELECT文の記述の仕方
VB6.0 oracle10g winXP にて開発中です。 よろしくお願いします。 2つのテーブルを結合したいと思っています。 基本テーブル キー 品名 仕入先(1) 仕入先(2) 仕入先(3) 001 機械1 1 3 4 002 機械2 2 2 1 仕入先マスタ NO 仕入先名 1 東京 2 大阪 3 名古屋 4 福岡 と言った具合にテーブルがあるのですが、出力の時に ****************************************** 001 機械1 1 東京 3 名古屋 4 福岡 ****************************************** と言った具合に出したいと思っています。 1つの項目でしたら SELECT キー,品名,仕入先(1),仕入先名 FROM 基本テーブル,仕入先マスタ WHERE 仕入先(1) = NO と言った感じでできるのですが…。 2つ3つ仕入先がある場合はどう記述してよいかお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
例えば・・ select a.キー,a.品名, a.仕入先(1),b.仕入先名, a.仕入先(2),c.仕入先名, a.仕入先(3),d.仕入先名 from 基本テーブル a, 仕入先マスタ b, 仕入先マスタ c, 仕入先マスタ d where a.仕入先(1) = b.no(+) and, a.仕入先(2) = c.no(+) and, a.仕入先(3) = d.no(+) ; とか select a.キー,a.品名, a.仕入先(1),b.仕入先名, a.仕入先(2),c.仕入先名, a.仕入先(3),d.仕入先名 from 基本テーブル a left join 仕入先マスタ b on(a.仕入先(1) = b.no) left join 仕入先マスタ c on(a.仕入先(2) = c.no) left join 仕入先マスタ d on(a.仕入先(3) = d.no) ; とか select a.キー,a.品名, a.仕入先(1),(select 仕入先名 from 仕入先マスタ where 仕入先(1)=no), a.仕入先(2),(select 仕入先名 from 仕入先マスタ where 仕入先(2)=no), a.仕入先(3),(select 仕入先名 from 仕入先マスタ where 仕入先(3)=no) from 基本テーブル a ; など、様々な書き方/解き方があります。 どれが効率良いかは、ご自分で考えてください。
その他の回答 (1)
- cocomonchi
- ベストアンサー率23% (29/123)
こんな感じです SELECT a.キー,a.品名,a.仕入先(1),b.仕入先名 ,a.仕入先(2),c.仕入先名 ,a.仕入先(1),d.仕入先名 FROM 基本テーブル a ,仕入先マスタ b ,仕入先マスタ c ,仕入先マスタ d WHERE a.仕入先(1) = b.NO and a.仕入先(1) = c.NO and a.仕入先(1) = d.NO
お礼
ありがとうございました。 where文以降の記述で(+)がなかったために選択されなかったようです。 a.仕入先(1) = b.no(+) and, a.仕入先(2) = c.no(+) and, a.仕入先(3) = d.no(+) ありがとうございました。
補足
早速回答ありがとうございます。 早速試しました。条件を忘れていました。基本テーブルのデータは"0" もあります。つまり仕入先マスタに無いものもあります。それもふまえて WHERE以降の記述ですが… WHERE a.仕入先(1) = b.NO and a.仕入先(1) = c.NO and a.仕入先(1) = d.NO これは仕入先(1)…仕入先(2)…仕入先(3)でしょうか? 両方試してみましたが、 仕入先(1)…仕入先(1)…仕入先(1)の場合 仕入先が"0"の場合同じデータが出てきてしまいます。 仕入先(1)…仕入先(2)…仕入先(3)の場合 ”データが選択されませんでした” となります…。 よろしくお願いします。
お礼
ありがとうございます。 ばっちりうまくいきました・ WHERE文以降の記述で(+)が抜けていたために選択されないということでした。 方法は select a.キー,a.品名, a.仕入先(1),b.仕入先名, a.仕入先(2),c.仕入先名, a.仕入先(3),d.仕入先名 from 基本テーブル a, 仕入先マスタ b, 仕入先マスタ c, 仕入先マスタ d where a.仕入先(1) = b.no(+) and, a.仕入先(2) = c.no(+) and, a.仕入先(3) = d.no(+) でできました。 ありがとうございます。