
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ランキング
-
エクセルで最後の文字だけ置き...
-
select文のwhere句に配列を入れ...
-
エクセルの関数について教えて...
-
入力値と外部キーをINSERTするには
-
PL/SQLの変数について
-
URL と行番号の指定
-
キー毎の、ある列のmaxのレコー...
-
SQLサーバから、項目の属性(型...
-
SQLで残高計算
-
武漢からのチャーター機
-
accessのチェックボックスをSQL...
-
MySQLのint型で001と表示する方...
-
複数テーブルからLIKE検索を行...
-
【Transact-sql】 execの結果を...
-
マイクラPC版のコマンドで効率...
-
”photo id” とは何ぞや?
-
SQLにて特定の文字を除いた検索...
-
所有格の意味
-
レコード削除・sqlインジェクシ...
-
このサイト(ttp://127.0.0.1/p...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エラー 1068 (42000): 複数の主...
-
エクセルの関数について教えて...
-
VIEWの元のテーブルのindexって...
-
sqlで、600行あるテーブルを100...
-
SQLサーバから、項目の属性(型...
-
SQL Left Join で重複を排除す...
-
Access パラメータクエリをcsv...
-
クエリ表示と、ADOで抽出したレ...
-
ストアドのエラーについて
-
マイクラPC版のコマンドで効率...
-
バインド変数について
-
SQLにて特定の文字を除いた検索...
-
副問合せの書き方について
-
【Transact-sql】 execの結果を...
-
”photo id” とは何ぞや?
-
mysql+phpをつかったカートつく...
-
MySQL5.5 viewの処理速度改善に...
-
select文のwhere句に配列を入れ...
-
テーブル名を省略して「h.id」...
おすすめ情報