• ベストアンサー

結合の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つ仕入先がある場合はどう記述してよいかお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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 ; など、様々な書き方/解き方があります。 どれが効率良いかは、ご自分で考えてください。

noname#69946
質問者

お礼

ありがとうございます。 ばっちりうまくいきました・ 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(+) でできました。 ありがとうございます。

その他の回答 (1)

回答No.1

こんな感じです 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

noname#69946
質問者

お礼

ありがとうございました。 where文以降の記述で(+)がなかったために選択されなかったようです。 a.仕入先(1) = b.no(+) and, a.仕入先(2) = c.no(+) and, a.仕入先(3) = d.no(+) ありがとうございました。

noname#69946
質問者

補足

早速回答ありがとうございます。 早速試しました。条件を忘れていました。基本テーブルのデータは"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)の場合 ”データが選択されませんでした” となります…。 よろしくお願いします。

関連するQ&A