こんばんは。
SQLでの外部結合について教えてください。(オラクルの場合です)
データを取得しいテーブルが4つあったとします。
Aテーブルのキーは、「ユーザーID」と「名前」と「住所」だとします。
Bテーブルのキーは、「名前」と「郵便番号」とします。
Cテーブルのキーは、「名前」と「郵便番号」とします。
取得したいデータは、全てのテーブルに存在しています。
Aテーブルに対してBテーブルとCテーブルを外部結合したいと思っています。
Aテーブルには「ユーザーID」があります。
Bテーブルからは、「給料」データが取得したいのです。
Cテーブルからは、「年齢」データが取得したいのです。
B,Cのテーブルに条件に合致するものがなくても、AのユーザーIDだけは
表示したいと思っています。
自分なりに考えて色々試したのですが、うまく行かず構文でエラーになります。
どうしてもAテーブルに外部結合したいです。
SELECT A.ユーザーID, B.給料, C.年齢
FROM A, B, C
WHERE A.ユーザーID = ’XXXXX’,
A.名前 = ’AAAAAA’,
A.住所 = ’KKKKKKKKKKK’,
A.名前(+) = B.名前,
A.名前(+) = C.名前,
A.郵便番号(+) = B.郵便番号,
A.郵便番号(+) = C.郵便番号
このように考えたのですが,「すでに1つの表と外部結合されています」みたいに
エラーがでてしまいます。
どのように修正すれば、よいのでしょうか?
よろしくお願い致します。
※全角になっているなどは、見やすくする為にやっています。
No.3ベストアンサー
- 回答日時:
>この場合、Aのテーブルに対して外部結合をしていると言う
>表現になるのでしょうか??
その表現でいいと思います。
結合条件が複数ある場合は、全ての列に(+)が必要です。
また、結合するテーブルが3つ以上のときは、
A.列名 = B.列名(+) AND B.列名 = C.列名(+) としてはダメで、
A.列名 = B.列名(+) AND A.列名 = C.列名(+)
というふうに、1つのテーブルを中心にして、
他のテーブルと結合するようにします。
またまた、ご回答ありがとうございます。
そして、返事が遅くなってすいません。
上記の書き方にてうまくいきました。
やっと、少しずつ理解できてきたように思います。
ありがとうございました。
No.4
- 回答日時:
こんにちは。
No.2の方が詳しく書かれていますが、
要するに
「データが無くても、無理矢理くっつけたいテーブル」
のほうに対して「(+)」を指定すれば良いのです。
質問のところに書いてある構文だと、
逆になってしまっているのが原因ですね。
ご回答ありがとうございます。
くっつけたい方に (+)をつければ良かったんですね。
まったくもって、逆でした(^^;)
これで、構文エラーもなく、期待通りのデータが取得できました。
ありがとうございました。
No.2
- 回答日時:
ユーザIDがそれぞれのテーブルの単一のキーで、
Bテーブルからは、「給料」データを、
Cテーブルからは、「年齢」データを
取得するものとして回答します。
SELECT A.ユーザID, B.給料, C.年齢
FROM A, B, C
WHERE A.ユーザID = B.ユーザID(+)
AND A.ユーザID = C.ユーザID(+)
AND A.ユーザID = 'XXXXX'
AND A.名前 = 'XXXXX';
で、外部結合できるはずです。
ご回答ありがとうございます。
上記のようにすれば良いのですね。
勉強になります。
この場合、Aのテーブルに対して外部結合をしていると言う
表現になるのでしょうか??
まだ、外部結合について理解が乏しくて、このような質問で
申し訳ありません。本なんかを読んでいても外部結合について
なかなか理解できなくて・・。
よろしくお願い致します。
No.1
- 回答日時:
>データを取得しいテーブルが4つあったとします。
A、B、Cの3つではないでしょうか。
>Aテーブルのキーは、「ユーザーID」と「名前」と「住所」だとします。
Bテーブルのキーは、「名前」と「郵便番号」とします。
Cテーブルのキーは、「名前」と「郵便番号」とします。
キーは各テーブルに共通したものとするのがよいのではないでしょうか。
>A.ユーザーID = ’XXXXX’,
A.名前 = ’AAAAAA’,
A.住所 = ’KKKKKKKKKKK’
これだと特定のレコードしか選ばれないのではないでしょうか。また、これらの条件の間に論理記号が必要ではないでしょうか。
この回答への補足
すいません。3つのテーブルでした(^^;)
例としてあげたものが、少し不適切でした。
少し変えて例をあげたいと思います。
Aテーブルのキー: ユーザーID、名前、誕生月
Bテーブルのキー: ユーザーID、名前
Cテーブルのキー: ユーザーID、名前
となっています。
3つのテーブルからデータが取得したい点は変わりません。
必ず表示させたいのは、「誕生月」とします。
WHERE A.ユーザーID(+) = B.ユーザーID AND
A.ユーザーID(+) = C.ユーザーID AND
A.名前(+) = B.名前 AND
A.名前(+) = B.名前 AND
A.ユーザーID = ’AAAAAA’ AND
A.誕生月 IN('1’, '2', '5')
上記のように複数の誕生月があって、誕生月に対応するデータがB表、
C表になかった場合でも、誕生月の(1,2,5)は必ずデータとして、
帰ってきて欲しいと思っています。
このような場合に、どのように記述すればよいでしょうか??
よろしくお願い致します。
※わかりにくい点などありましたら、どんどんご指摘ください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle sqlのupdate文で質問です。 テーブルBの番号をキーにテーブルAの身長をテーブルBの身長に更新 2 2022/11/02 15:15
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- Oracle sqlで質問です。 Aテーブルの登録番号をキーにBテーブルから確認番号を取得したいのですが、Bテーブ 4 2023/05/18 13:08
- Oracle sqlで質問です。 Aテーブルの情報をBテーブルに更新かけたいです。 やりたいことは、Bテーブルの受 1 2023/05/17 11:17
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- Oracle update文で質問です。 下記の条件でupdateをしたいですが、どのようにしたら良いでしょうか。 2 2022/06/23 10:51
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- Oracle sqlで質問です。 idを元にidに紐付くデータで住所コードがjpのみのデータ以外のidを取得したい 4 2023/03/20 17:41
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
外部キーだけのテーブル(主キ...
-
L2SWはARPテーブルを持っている?
-
会社の飲み会の幹事になり、座...
-
MySQLで複数テーブルを作成する
-
複数テーブルにわたるCOUNT
-
【PHP】SQL文のSUM関数で出力し...
-
テーブルリンク リンク元を知...
-
テーブル所有者、スキーマ所有...
-
アクセスのリンクテーブル一覧...
-
お金持ちのテーブル
-
テーブルの白く剥がれてるところに
-
2つのテーブルのカウント結果...
-
ちょっとぐらいの時間なら里山...
-
包丁が危険
-
「テーブルに座って……」という...
-
[DB設計]多対多の問題点とは
-
【SQL】グループ化した際の最頻...
-
ACCESS VBA でテーブルの定義だ...
-
論理名とコメント構文(?)について
-
飲み会で、座敷orテーブルどち...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
会社の飲み会の幹事になり、座...
-
テーブルリンク リンク元を知...
-
L2SWはARPテーブルを持っている?
-
テーブルの白く剥がれてるところに
-
飲み会で、座敷orテーブルどち...
-
まるいテーブル 円い 丸い 漢字...
-
1つのテーブルに同じデータを参...
-
このテーブルで
-
置き配された食べ物を袋からど...
-
外部キーだけのテーブル(主キ...
-
【PHP】SQL文のSUM関数で出力し...
-
「テーブルに座って……」という...
-
男性と2人で飲食店に行きテーブ...
-
アクセスのリンクテーブル一覧...
-
一致するデータのみ削除したい
-
論理名とコメント構文(?)について
-
ACCESSで3ファイルを結合して、...
-
MySQLで複数テーブルを作成する
-
複数テーブルにわたるCOUNT
-
SQL 外部結合
おすすめ情報