SQLの自己結合のサンプルです。
自己結合
select 項目 from テーブルA as a inner join テーブルA as b on 結合する条件 |
- テーブルに別名をつけて同じテーブル同士を結合します。
自己結合の使用例
次のテーブルがあるとします。
id | name | boss |
---|---|---|
1 | suzuki | NULL |
2 | tanaka | 1 |
3 | kobayashi | 2 |
社員とその社員の上司を表すテーブルです。
項目「boss」がその社員の上司です。
suzukiの上司は、項目「boss」の値がnullのためいません。
tanakaの上司は、項目「boss」の値が1なので「id」が1のsuzukiです。
kobayashiの上司は、項目「boss」の値が2なので「id」が2のtanakaです。
SQL
上記テーブルに対して自己結合を使用してnameとその上司のデータを抽出します。
select a.id,a.name,b.name as boss
from employee as a
inner join employee as b
on a.boss = b.id;
2,3行目は、同じテーブルからそれぞれaとbという別名を付けています。
4行目の「a.boss = b.id」が結合条件です。
結果
結果は、以下のとおりです。
id | name | boss |
---|---|---|
2 | tanaka | suzuki |
3 | kobayashi | tanaka |
結合条件に一致したデータのみが表示されます。
項目「id」1の"suzuki"の行は表示されません。
関連の記事
SQL INSERT文でテーブルの行を追加するサンプル
SQL UPDATE文でテーブルの行を更新するサンプル
SQL distinct 重複行を表示しないサンプル
SQL 複数の行をまとめる(集約関数/group by/having)
SQL LEFT JOIN 外部結合のサンプル
SQL 副問合せのサンプル(サブクエリ)
SQL INNER JOIN 内部結合のサンプル
SQL UNIONとUNION ALLのサンプル(結合して抽出)