![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
テーブルの結合についてお聞きしたいことがあります。
カラム「KEY」を結合条件に
テーブルA、B、Cを結合して【取りたい結果】のようなデータを取りたいと思っています。
しかし、テーブルAにBとCをLEFT JOINを結合した所、
【取得された結果】のデータが取得されました。
どのような結合をしたら期待通りの結果が得られるのでしょうか?
回答宜しくお願いします。
【取得された結果】
key dataA dataB dataC
-------------------------------------------------
1 A-1 B-1 C-1
A-1 B-1 C-2
A-1 B-1 C-3
2 A-2
3 A-3
【取りたい結果】
key dataA dataB dataC
-------------------------------------------------
1 A-1 B-1 C-1
A-1 C-2
A-1 C-3
2 A-2
3 A-3
【テーブルA】
key dataA
---------------------
1 A-1
2 A-2
3 A-3
【テーブルB】
key dataB
---------------------
1 B-1
【テーブルC】
key dataC
---------------------
1 C-1
1 C-2
1 C-3
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
ANo1 です。
補足です。とりたい結果に【テーブルA】は重複してでていますが、
もし出したくないのなら。
select key,max(dataA),max(dataB),max(dataC) from
(
select key,dataA,Null as dataB,Null as dataC,
ROW_NUMBER() OVER (PARTITION BY key order by dataA) rn,key as keydmy
from 【テーブルA】a
union
select key,Null as dataA,dataB,Null as dataC,
ROW_NUMBER() OVER (PARTITION BY key order by dataB) rn,key as keydmy
from 【テーブルB】
union
select key,Null as dataA,Null as dataB,dataC,
ROW_NUMBER() OVER (PARTITION BY key order by dataB) rn,key as keydmy
from 【テーブルC】
)
group by keydmy,key,rn
order by keydmy,rn
※とりたい結果には、keyが出ていない行がありますが、【テーブルA】が1行しかないときに
出さないのか、【テーブルA】【テーブルB】【テーブルC】どれかが複数行あるときに出さない
のか?それによってやり方は変わります。
No.1
- 回答日時:
select key,dataA from 【テーブルA】a
left outer join
(
select key,max(dataB),max(dataC) from
(
select key,dataB,Null as dataC,
ROW_NUMBER() OVER (PARTITION BY key order by dataB) rn from 【テーブルB】
union
select key,Null as dataB,dataC,
ROW_NUMBER() OVER (PARTITION BY key order by dataC) rn from 【テーブルC】
) group by key,rn
) bc
where a.key = bc.key
## unionじゃなくってfull outer join でもできそうですが
## (って、Oracleの命令は別のだったかな?そもそも、Ver書いていないのでこちらは使えるか不明)
なにやっているのか。
select key,dataB,Null as dataC,
ROW_NUMBER() OVER (PARTITION BY key order by dataB) rn from 【テーブルB】
select key,Null as dataB,dataC,
ROW_NUMBER() OVER (PARTITION BY key order by dataC) rn from 【テーブルC】
はそれぞれ
【テーブルB】
key dataB rn
---------------------
1 B-1 1
【テーブルC】
key dataC rn
---------------------
1 C-1 1
1 C-2 2
1 C-3 3
を作ってます。
(select key,max(dataB),max(dataC) from
(・・・
) group by key,rn
) bc
は
【テーブルBC】(rn)は項目としてないけど。
key dataB dataC (rn)
---------------------
1 B-1 C-1 1
1 C-2 2
1 C-3 3
を作っています。
これと【テーブルA】を結合すると望みに近いものが出るでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
GROUP BYを行った後に結合した...
-
select insertで複数テーブルか...
-
外部結合とor条件混在の記述方法
-
select句副問い合わせ 値の個...
-
SET句内で複数の条件を指定して...
-
SELECTの結果で同一行を複数回...
-
固定値を含む結合と複数テーブ...
-
updateの一括実行
-
MERGE文を単体テーブルに対して...
-
構成比を求めるSQL文につきまして
-
他のテーブルを参照した値はupd...
-
oracleの分割delete
-
「何々でなければ、この値」と...
-
集計後の数値が倍になる
-
複数テーブルのMAX値の行データ...
-
COUNTの取得方法(?)について...
-
テーブル結合について
-
大量にデータを更新するテーブ...
-
Oracle9i SQLについて
-
SQL で更新(update)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
GROUP BYを行った後に結合した...
-
select句副問い合わせ 値の個...
-
SELECTの結果で同一行を複数回...
-
select insertで複数テーブルか...
-
MERGE文を単体テーブルに対して...
-
外部結合とor条件混在の記述方法
-
固定値を含む結合と複数テーブ...
-
SQLの書き方(チェックボックス)
-
他のテーブルを参照した値はupd...
-
複数テーブルのMAX値の行データ...
-
SQL GROUPで件数の一番多いレコ...
-
oracleの分割delete
-
unionの結果は集計はできないで...
-
SET句内で複数の条件を指定して...
-
unionでマージした副問合せを結合
-
集計後の数値が倍になる
-
COUNTの取得方法(?)について...
-
DELETE 文とEXISTSの使い方につ...
-
updateの一括実行
-
結合と副問い合わせの違い
おすすめ情報