初歩的な質問で申し訳ありません。
以下のような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
※ 口座情報に対し、銀行情報や顧客情報がないケースも存在します。
教えて下さい。
よろしくお願いします。
No.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
しかしそもそもテーブルの正規化が出来ていないという、関係データベースの基礎がおろそかになっているように思われます。
素直に重複が発生しないように、テーブル設計を見直してはいかがでしょうか。
Ogre7077様、ご回答ありがとうございます。
返事が遅くなり、申し訳ありません。
教えて頂いたように記述したところ、問題なく実現できました。
ありがとうございました!
No.1
- 回答日時:
口座を中心として、他の二つを外部結合する形になるかと思います
銀行情報や顧客情報が無い場合は、銀行名や顧客名が 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だと
たとえ口座を中心とした場合でも、口座の情報が重複して出力されてしまうかと思われます。
顧客の情報をユニークにしてから結合させるにはどのような記述にすれば良いでしょうか、、、
初歩的な質問で申し訳ありません。
教えて下さい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
- 金融業・保険業 昔は銀行での顧客の情報を口外してもそこまで罪にならなかったのですか? 昔地元で自営業をしてる人が宝く 2 2023/03/07 18:40
- 預金・貯金 新しく口座を作る銀行に1000万円を定期預金しようと思います。 今まで利用したことのない銀行で100 15 2022/06/01 10:41
- その他(社会・学校・職場) いまだにフロッピーディスクを使う役所や銀行ってどう思いますか? 節約といえば聞こえは良いけど、 例え 5 2022/05/03 16:26
- 銀行・ネットバンキング・信用金庫 中国の人を相手に商売をする予定で、お金のやりとりについての質問です。 1 2022/05/16 11:34
- 銀行・ネットバンキング・信用金庫 銀行って顧客の口座の動きって監視してるんですか?aiが監視してるんですか? 5 2022/12/24 00:02
- モバオク! PayPay銀行のログインID PWのどちらも分からず、ログイン出来ずに困っています 5 2023/04/07 18:04
- その他(データベース) accessについて 2 2022/05/31 16:58
- 金融業・保険業 銀行のコンプライアンス通報 1 2022/05/13 23:36
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sqlのwhere句で下記の条件にし...
-
orace SQL文のエラー(ORA-0092...
-
64bit端末でのOLEDB接続に関して
-
副問合せにLIKE文を使う方法は...
-
osqleditについて
-
CASLⅡ 文字データから数値デー...
-
バッチファイルで複数フォルダ...
-
oracleのimpdpでORA-39166
-
データベースのカラムの型がCHA...
-
SQL 2つのテーブルとSUBSTRING...
-
sqlplusで接続できない
-
オラクル試験でのクラムメディ...
-
Oracle で文字列からタイムスリ...
-
【SQL】IN句内のサブクエリが重...
-
棒読みちゃんが起動できないの...
-
sqlで質問です。 Aテーブルは店...
-
SQLの中上級者へのレベルアップ...
-
SELECTによる表の変換方法を教...
-
開発対象となるアプリケーショ...
-
質問です。 下記のテーブルとデ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
副問合せにLIKE文を使う方法は...
-
batファイルでのSQL(oracle)...
-
oracleのimpdpでORA-39166
-
データベースのカラムの型がCHA...
-
64bit端末でのOLEDB接続に関して
-
ORA-14452について
-
osqleditについて
-
Oracleで文字列型の時間を引き...
-
バッチファイルで複数フォルダ...
-
orace SQL文のエラー(ORA-0092...
-
ワークテーブルって何?
-
SQLで今日の日付でWhereしたい
-
SQLについて教えて下さい。 主...
-
oracleの直接接続のクライアン...
-
SQL 2つのテーブルとSUBSTRING...
-
質問です。 下記のテーブルとデ...
-
続.ORACLEのSELECTのソートに...
-
SQLの中上級者へのレベルアップ...
-
テーブルやカラムの物理名のネ...
-
下記のsqlで取得されるレコード...
おすすめ情報