こんにちは。ぽこです!
今回は、MySQLで、複数テーブルをfull outer joinのように完全外部結合する方法について紹介します。
はじめに
MySQLにはfull outer join の機能がありません。そのため、別の方法を使ってその動きを再現する必要があります。
left joinとright joinを使用してfull outer joinを再現する
left joinとright joinを使用してfull outer joinを再現する方法は、次のようになります。
1 2 3 |
select * from tableA left join tableB using(id) union select * from tableA right join tableB using(id) |
これは、full outer join を使った、次のSQLと同等のものになります。
1 |
select * from tableA full outer join tableB using(id) |
では、これを3つのテーブルについて行いたい場合はどうなるでしょうか?イメージはこちらになります。
1 |
select * from tableA full outer join tableB using(id) full outer join tableC using(id) |
書いてみると、次のようになります。
1 2 3 4 5 |
select * from tableA left join tableB using(id) left join tableC using(id) union select * from tableB left join tableA using(id) left join tableC using(id) union select * from tableC left join tableB using(id) left join tableA using(id) |
full outer joinを使った場合の3倍になっていることが分かります。
このように、複数のテーブルを結合する場合、テーブルの数倍のSQLが必要になりますが、すべてのテーブルを基準に置くことで、解決できます。