テーブルの結合についてお聞きしたいことがあります。
カラム「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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) python 3.10で 同じlistに同じ構文で同じデータ代入した結果が異なる現象発生 7 2022/06/18 11:08
- Access(アクセス) Access クエリ 同一テーブル内 複数フィールドの同時集計のやり方について 1 2022/05/18 19:01
- 統計学 生物統計学の質問 7 2022/05/17 13:59
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- MySQL 複数DBテーブルからのデータ取得 3 2022/05/17 15:02
- Oracle sqlで質問です。 idを元にidに紐付くデータで住所コードがjpのみのデータ以外のidを取得したい 4 2023/03/20 17:41
- Oracle SQL update方法 2 2022/06/22 14:07
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- Oracle sqlで質問です。 Aテーブルの登録番号をキーにBテーブルから確認番号を取得したいのですが、Bテーブ 4 2023/05/18 13:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
GROUP BYを行った後に結合した...
-
SELECTの結果で同一行を複数回...
-
select句副問い合わせ 値の個...
-
MERGE文を単体テーブルに対して...
-
複数テーブルのMAX値の行データ...
-
select insertで複数テーブルか...
-
SQLの書き方(チェックボックス)
-
固定値を含む結合と複数テーブ...
-
SQL GROUPで件数の一番多いレコ...
-
DELETE 文とEXISTSの使い方につ...
-
テーブルの列名をデータとして...
-
unionの結果は集計はできないで...
-
外部結合とor条件混在の記述方法
-
oracleの分割delete
-
集計後の数値が倍になる
-
AccessからOracleへの外部結合
-
SET句内で複数の条件を指定して...
-
Oracleでの文字列連結サイズの上限
-
Accessで別テーブルの値をフォ...
-
SELECTで1件のみ取得するには?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
GROUP BYを行った後に結合した...
-
select insertで複数テーブルか...
-
select句副問い合わせ 値の個...
-
SELECTの結果で同一行を複数回...
-
固定値を含む結合と複数テーブ...
-
MERGE文を単体テーブルに対して...
-
unionの結果は集計はできないで...
-
oracleの分割delete
-
SET句内で複数の条件を指定して...
-
複数テーブルのMAX値の行データ...
-
SQL GROUPで件数の一番多いレコ...
-
他のテーブルを参照した値はupd...
-
外部結合とor条件混在の記述方法
-
unionでマージした副問合せを結合
-
COUNTの取得方法(?)について...
-
集計後の数値が倍になる
-
SQLの書き方(チェックボックス)
-
副問い合わせのinsert文
-
OracleのSQLについて質問があり...
-
updateの一括実行
おすすめ情報