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