たまに、「このテーブルを条件を変えて複数回JOINしたいな」ってことがあります。
初めはそんなことできるの?と思いましたができました。
そこで今回は、同じテーブルも何回もJOINする方法を書いていきます。
JOINするテーブルにエイリアス(別名)を付ければできます
原則的には同じテーブルを何回もJOINすることはできません。
そこで、同じテーブルではないとDBMSに認識させるためにJOINする度にテーブルにエイリアス(別名)を付けてユニークなテーブルにすることでJOIN可能となります。
// table1にtable2を3回JOINします。
SELECT * FROM table1
JOIN table2 AS table2_1 ON table1.id_1 = table2_1.id_1
JOIN table2 AS table2_2 ON table1.id_2 = table2_2.id_2
JOIN table2 AS table2_3 ON table1.id_3 = table2_3.id_3
なお、ここで使っている「AS」はエイリアス(別名)を付けるための句で、他にもカラムやサブクエリで取得したテーブルに別名を付けたりもできます。
機会は少ないかもしれませんが、結合元と結合先で全く同じテーブルを複数回JOINすることも可能です(上記だとtable1をtable1にJOINする。)。
注意点
最後に注意点ですが、同じテーブルを複数回JOINした場合、その回数だけ、取得したテーブルの中でカラム名が被ってしまいます。
したがって、利用したいカラムが決まっている場合は、あらかじめSELECT文でにカラムを指定してそのカラムにエイリアスを付けて取得しておくといった工夫をするといいと思います。
SELECT table1.id AS id, table2_1.cd AS cd1, table2_2.cd AS cd2, table2_3.cd AS cd3 FROM table1
JOIN table2 AS table2_1 ON table1.id_1 = table2_1.id_1
JOIN table2 AS table2_2 ON table1.id_2 = table2_2.id_2
JOIN table2 AS table2_3 ON table1.id_3 = table2_3.id_3
この記事が誰かのお役にたてば嬉しいです。