
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で質問しましょう!
似たような質問が見つかりました
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- MySQL mysqlの結合について教えてください 1 2022/05/19 15:13
- Access(アクセス) アクセス 削除するレコードを含んだテーブルを指定してくださいのエラー対処方法 1 2022/11/24 15:01
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- MySQL エラー 1068 (42000): 複数の主キーが定義されていますエラー 2 2022/11/17 04:36
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- MySQL 次の時間帯の勝率の合計を求めるSQL文 1 2023/07/04 17:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エクセルの関数について教えて...
-
select文のwhere句に配列を入れ...
-
sqlで、600行あるテーブルを100...
-
Access パラメータクエリをcsv...
-
同じサブクエリが複数出てくる...
-
エラー 1068 (42000): 複数の主...
-
一つ前のレコードの値と減算し...
-
selectした大量データをinsert...
-
Unionした最後にGROUP BYを追加...
-
SQLにて特定の文字を除いた検索...
-
[MySQL] 3つのテーブルの結合で...
-
VIEWの元のテーブルのindexって...
-
LEFT JOIN と GROUP BY
-
PL/SQLの変数について
-
select join に複数の条件をつ...
-
フィールド名を変数で指定するには
-
MySQLのint型で001と表示する方...
-
SQL Left Join で重複を排除す...
-
バインド変数について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エクセルの関数について教えて...
-
select文のwhere句に配列を入れ...
-
sqlで、600行あるテーブルを100...
-
WordpressのContact form 7でzi...
-
エラー 1068 (42000): 複数の主...
-
VIEWの元のテーブルのindexって...
-
selectした大量データをinsert...
-
SQL Left Join で重複を排除す...
-
[MySQL] 3つのテーブルの結合で...
-
SQLサーバから、項目の属性(型...
-
SQLにて特定の文字を除いた検索...
-
PL/SQLの変数について
-
【Transact-sql】 execの結果を...
-
Access パラメータクエリをcsv...
-
[MySQL] UNIQUE制約の値を更新...
-
Unionした最後にGROUP BYを追加...
-
副問合せの書き方について
-
DB設計について
-
1テーブル&複数レコードの更新...
おすすめ情報