テーブル結合について、下記SQLをANSI結合の書き方で表したい。
select *
from
(select key from A
union
select key from B
union
select key from C) X,
A,B,C
where X.key=A.key(+) and X.key=B.key(+) and X.key=C.key(+)
このSQLをANSI結合の記述で書きたいのですが、
(+)での結合文になれておらず試行錯誤しております。
下記のようなのかなとは模索しておりますが、
手元に実行環境がなくわかりません。
また、要所気付く点などありましたら、ご指摘願います。
select A.*, B.*, C.*
from
(select key from A
union
select key from B
union
select key from C) X,
LEFT JOIN A
ON X.key=A.key
LEFT JOIN B
ON X.key=B.key
LEFT JOIN C
ON X.key=C.key
No.3ベストアンサー
- 回答日時:
敢えていうなら、Xの後のカンマが不要です。
select *
from
(select key from A
union
select key from B
union
select key from C) X
LEFT JOIN A ON X.key=A.key
LEFT JOIN B ON X.key=B.key
LEFT JOIN C ON X.key=C.key
Aテーブルのkey、Bテーブルのkey、Cテーブルのkeyが重複する可能性があり、
keyが重複する場合は、単純横展開ではなく、1行にしたいという条件であれば、
(+)を単純にLEFT OUTER JOINにするだけで良いと思います。
No.2
- 回答日時:
>aテーブルでジョイントする理由は1レコード単位での
>抽出としたいがためです大変参考になりました
>ありがとうございます
横展開したいだけならUNIONで項目をずらしていけばいいのではないでしょうか。
select key as A_key, null as B_key, null as C_Key from A
union
select null as A_key, key as B_key, null as C_Key from B
union
select null as A_key, null as B_key, key as C_Key from C
前提条件をはっきりしていただけると、もう少しピンポイントで回答できるとおもいます。
No.1
- 回答日時:
構文的にはあっているようですが,
A、B、CをUNIONしたXとさらにA、B、Cとジョインする意味はないと思います。
単純にX内のAと外のAは別テーブルなのか、X内のA、B、Cを外で参照できると勘違いしているのか、X内のAと外のAに意味はないのかはっきりさせてください。
()内でUNIONした者はXという別名がついているのでX.keyと指定しないと参照出来ません。
この質問より前につまづいていた
問題があるのですが
下記の方の質問と似ていることから
このsql文を参照しました
その為再度aテーブルでジョイントする
理由は1レコード単位での
抽出としたいがためです大変参考に
なりました
ありがとうございます
大戦
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- JavaScript 電車の運賃を出すプログラムを作っています。 2 2022/06/22 09:36
- PostgreSQL SQLで検索結果の記事を表示したい 1 2022/04/28 21:03
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- JavaScript Json のキーと値の出力の違いについて 2 2022/06/14 20:22
- Visual Basic(VBA) マクロで最終行を取得してコピーしたい 3 2022/04/06 19:07
- オープンソース Pythonのコードをexe化 1 2023/07/03 08:01
- MySQL エラー 1068 (42000): 複数の主キーが定義されていますエラー 2 2022/11/17 04:36
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テーブル結合について、下記SQL...
-
レコードが選択されないときの...
-
あるカラムのMAX値+1をINSERTし...
-
Oracle 9iで英字を含まないレコ...
-
sumやcount関数について
-
複数条件に当てはまる行の抽出...
-
GROUP BYを行った後に結合した...
-
Oracleでの文字列連結サイズの上限
-
SELECTで1件のみ取得するには?
-
SQL文で右から1文字だけ削除す...
-
DataGridViewの内容をDBに反映...
-
select句副問い合わせ 値の個...
-
他のテーブルを参照した値はupd...
-
最新の日付とその金額をクエリ...
-
ADO VBA 実行時エラー3021
-
Accessで別テーブルの値をフォ...
-
ヘッダレコードとトレーラレコ...
-
ファイル書込みで一行もしくは...
-
GROUP BYを使ったSELECT文の総...
-
[VBA] ADOの Clone と AddNew
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
レコードが選択されないときの...
-
複数行を1行にするSQL
-
sqlのwhereで指定した条件の前...
-
あるカラムのMAX値+1をINSERTし...
-
外部結合に条件をつけたい
-
ループの仕方
-
Oracle8iでSQL文の引数について
-
テーブル結合について、下記SQL...
-
sumやcount関数について
-
PL/SQLの基礎的な質問ですが・・
-
SQLPLUSにて演算子を使う方法と...
-
複数条件に当てはまる行の抽出...
-
distinct句を使わずレコード総...
-
GROUP BYを行った後に結合した...
-
Accessで別テーブルの値をフォ...
-
Oracleでの文字列連結サイズの上限
-
SELECTで1件のみ取得するには?
-
SQL文で右から1文字だけ削除す...
-
GROUP BYを使ったSELECT文の総...
-
select句副問い合わせ 値の個...
おすすめ情報