
LEFT JOIN とRIGHT JOINの合体版のような結合方法。
使用DBはMySQL5.0.45です。
2つのテーブルの結合方式で、結合条件に合致しなかった場合、
両方のデータを結果セットに含めることはできますか?
LEFT JOINだと、左側のテーブルのデータは結果に返ってきて、右側のデータはNULLになります。
RIGHT JOINだと、右側のテーブルのデータは結果に返ってきて、左側のデータはNULLになります。
これを「左側データあり右側NULL」「左側NULL右側データあり」というレコードを混ぜて結果として返したいです。
具体的には、
以下二つのテーブルがあるとします。
table : test1
value id
-------------------
ああ 3
いい 4
うう 5
table : test2
value id
--------------------
AAA 1
BBB 2
CCC 3
DDD 4
id を結合条件のキーとして、以下のような結果を得たいです。
NULL NULL AAA 1
NULL NULL BBB 2
ああ 3 CCC 3
いい 4 DDD 4
うう 5 NULL NULL
LEFT JOINだと以下の結果に、
SELECT * FROM test1
LEFT JOIN test2 ON test1.id=test2.id
ああ 3 CCC 3
いい 4 DDD 4
うう 5 NULL NULL
RIGHT JOINだと以下の結果になってしまいます。
SELECT * FROM test1
RIGHT JOIN test2 ON test1.id=test2.id
NULL NULL AAA 1
NULL NULL BBB 2
ああ 3 CCC 3
いい 4 DDD 4
以上、ご教示お願い致します。
No.2ベストアンサー
- 回答日時:
先に回答してくださっている方のおっしゃる通り、MySQLでは完全外部結合
をサポートしていないようです。
蛇足かもしれませんが、完全外部結合はまさしく質問者様がやりたい事そのままの
ないようです。文法的には
SELECT * FROM test1
FULL OUTER JOIN test2 ON test1.id=test2.id
で、ORACLEなどでは質問者様の要望通りの結果が返ってきます。
先に回答して下さっている方の別解として、RIGHT JOINとLEFT JOINをUNIONする
というものもご紹介します。
質問者様の載せていた2つのSQLをUNIONするだけです。
SELECT * FROM test1
LEFT JOIN test2 ON test1.id=test2.id
UNION
SELECT * FROM test1
RIGHT JOIN test2 ON test1.id=test2.id
ご参考までに。
No.1
- 回答日時:
私の記憶ではmysqlは完全外部結合をサポートしていないような・・・
ただしUNIONでidを拾って、LEFT JOINを2度することで対応は可能です。
SELECT t1.*,t2.*
FROM (SELECT id from test1 union SELECT id from test2) AS SUB
LEFT JOIN test1 as t1 using(id)
LEFT JOIN test2 as t2 using(id)
ORDER BY SUB.id
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQLにて特定の文字を除いた検索...
-
SQL Left Join で重複を排除す...
-
エクセルの関数について教えて...
-
エラー 1068 (42000): 複数の主...
-
1テーブル&複数レコードの更新...
-
マイクラPC版のコマンドで効率...
-
select文のwhere句に配列を入れ...
-
selectで拾ってきたデータをも...
-
副問合せの書き方について
-
updateを1行ずつ実行したい。
-
クエリ表示と、ADOで抽出したレ...
-
グラビアアイドルからAV女優に...
-
Access VBAでのIDの自動発番
-
MySQL NULLだけをカウントして...
-
WordpressのContact form 7でzi...
-
LEFT JOIN と GROUP BY
-
親子関係があるテーブル内での検索
-
前のidをコピーするSQL文
-
インタ-ナット接続の初期画面で
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エクセルの関数について教えて...
-
VIEWの元のテーブルのindexって...
-
エラー 1068 (42000): 複数の主...
-
SQLサーバから、項目の属性(型...
-
select文のwhere句に配列を入れ...
-
SQL Left Join で重複を排除す...
-
Access パラメータクエリをcsv...
-
マイクラPC版のコマンドで効率...
-
【Transact-sql】 execの結果を...
-
sqlで、600行あるテーブルを100...
-
SQLにて特定の文字を除いた検索...
-
1テーブル&複数レコードの更新...
-
PL/SQLの変数について
-
WordpressのContact form 7でzi...
-
複数テーブルのGROUP BY の使い...
-
バインド変数について
-
inner joinをすると数がおかし...
-
MySQLのint型で001と表示する方...
-
updateを1行ずつ実行したい。
おすすめ情報