mysqlで、複数テーブルを完全外部結合したい

SQLと書かれたタイトル SQL

こんにちは。ぽこです!

今回は、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が必要になりますが、すべてのテーブルを基準に置くことで、解決できます。

タイトルとURLをコピーしました