自己結合(再帰結合)とは同じテーブル同士を結合することをいいます.一般に結合は異なるテーブルまたはビューを対象として行われますが,結合するテーブルが必ずしも異なるテーブルである必要はありません.
複数のテーブルを扱う場合はそれぞれFROM句に使用するテーブル名を記述しますが,自己結合の場合はテーブル名が同じですので区別ができません.そこでテーブル名に別名をつけます.自己結合はいろいろな書き方ができますが,基本的な書き方は以下のとおりです.
SELECT 列名1, 列名2, ...
FROM テーブル名 [AS] 別名1 [INNER] JOIN テーブル名 [AS] 別名2
ON 別名1.列名 = 別名2.列名
[WHERE 条件式など]
FROM句で同一のテーブルを指定し,AS句で別名をつけます.なおASは省略可能です.
例として以下の従業員マスタの自己結合を行い従業員の上司の名前を取得します.ここで上司コードは従業員の上司の従業員コードです.
従業員
従業員コード | 従業員名 | 上司コード |
---|---|---|
00001 | チャーリー・ブラウン | <NULL> |
00002 | ペパーミント・パティ | <NULL> |
00003 | ルシール・ヴァン・ぺルト | 00001 |
00004 | ライナス・ヴァン・ぺルト | 00003 |
00005 | シュローダー | 00001 |
00006 | マーシー | 00002 |
SQL
SELECT 部下.従業員コード, 部下.従業員名,
上司.従業員名 AS 上司の名前
FROM 従業員 AS 部下 JOIN 従業員 AS 上司
ON 部下.上司コード = 上司.従業員コード
ORDER BY 部下.従業員コード
結果
従業員コード | 従業員名 | 上司の名前名 |
---|---|---|
00003 | ルシール・ヴァン・ぺルト | チャーリー・ブラウン |
00004 | ライナス・ヴァン・ぺルト | ルシール・ヴァン・ぺルト |
00005 | シュローダー | チャーリー・ブラウン |
00006 | マーシー | ペパーミント・パティ |