プロが教えるわが家の防犯対策術!

初歩的な質問で申し訳ありません。

以下のような3つのテーブルを結合する際に、ある1つのテーブルの内容を全て
表示したまま、その他のテーブルの内容を付加するような出力をしたいと考えています。

考え方としては、内部結合という事で、INNER JOIN を使うというような事は想像できますが、
3つのテーブルではそのような事が可能でしょうか?

最終的には出力想定イメージのような形としたいと考えています。

[口座]
銀行No 顧客No 残高
-------------------
B001 C001 30000
B001 C003 10000
B002 C001 40000
B002 C002 10000
B002 C004 50000
B003 C004 60000

[銀行]
銀行No 銀行名
---------------
B001 foo銀行
B002 bar銀行

[顧客]
顧客No 顧客名
--------------
C001 阿部
C002 村上
C003 渡辺
C004 越智

【出力想定イメージ】
銀行No 銀行名 顧客No 顧客名 残高
-------------------
B001 foo銀行 C001 安部 30000
B001 foo銀行 C003 渡辺 10000
B002 bar銀行 C001 安部 40000
B002 bar銀行 C002 村上 10000
B002 bar銀行 C004 越智 50000
B003 C004 越智 60000

※ 口座情報に対し、銀行情報や顧客情報がないケースも存在します。


教えて下さい。

よろしくお願いします。

A 回答 (2件)

顧客情報が重複しているというなら、SQLを副問い合わせと外部結合の組み合わせにすれば何とかなります。



select A.銀行No, B.銀行名, A.顧客No, C.顧客名, A.残高
from 口座 as A
left outer join 銀行 as B on B.銀行No = A.銀行No
left outer join (select distinct 顧客No, 顧客名 from 顧客) as C on C.顧客No = A.顧客No

しかしそもそもテーブルの正規化が出来ていないという、関係データベースの基礎がおろそかになっているように思われます。
素直に重複が発生しないように、テーブル設計を見直してはいかがでしょうか。
    • good
    • 0
この回答へのお礼

Ogre7077様、ご回答ありがとうございます。

返事が遅くなり、申し訳ありません。

教えて頂いたように記述したところ、問題なく実現できました。

ありがとうございました!

お礼日時:2013/11/08 11:45

口座を中心として、他の二つを外部結合する形になるかと思います


銀行情報や顧客情報が無い場合は、銀行名や顧客名が NULL となりますのでご注意ください

select A.銀行No, B.銀行名, A.顧客No, C.顧客名, A.残高
from 口座 as A
left outer join 銀行 as B on B.銀行No = A.銀行No
left outer join 顧客 as C on C.顧客No = A.顧客No

この回答への補足

Ogre7077様、ご回答ありがとうございます。

これに関してもう1点だけ教えて下さい。

例題として間違っていますが、顧客データが重複していた場合、教えて頂いたSQLだと
たとえ口座を中心とした場合でも、口座の情報が重複して出力されてしまうかと思われます。

顧客の情報をユニークにしてから結合させるにはどのような記述にすれば良いでしょうか、、、

初歩的な質問で申し訳ありません。

教えて下さい。

補足日時:2013/11/05 13:21
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す