自己結合
CoddyのSQLジャーニー「基礎」セクションの一部。レッスン 46/72。
自己結合は、結合の一種です。これまで、複数のテーブルを結合する方法について説明してきましたが、自己結合では同じテーブルを結合します。典型的な例として、従業員のテーブルが挙げられます。
| employee_id | employee_name | manager_id |
| 1 | Minke | 2 |
| 2 | Temur | 3 |
| 3 | Tatjana | 4 |
| 4 | Marinela |
最上位の管理者を除き、すべての従業員に管理者がいて、すべての管理者は従業員でもあります。
問題:各従業員について、マネージャーの名前を知りたいとします。
SELECT e2.employee_id, e2.employee_name, e1.employee_name as manager_name
FROM employees as e1
JOIN employees as e2 ON e1.employee_id = e2.manager_id同じテーブルを結合しますが、1回目はe1、2回目はe2と呼びます。結合するのはemployee_idフィールドとmanager_idフィールドです。
結果:
| employee_id | employee_name | manager_name |
|---|---|---|
| 1 | Minke | Temur |
| 2 | Temur | Tatjana |
| 3 | Tatjana | Marinela |
チャレンジ
中級利用可能なテーブルと列:
friends:id、name、friend_id
互いに友達である友達のペアを見つけてください(人Aのfriend_idが人Bを指し、かつ人Bのfriend_idが人Aを指す場合、相互の友情が成立します)。両方の友達の名前を1行に表示してください。列名はfriend1とfriend2にしてください。
注:重複するペアが含まれないように、WHERE句に条件f1.id < f2.id(f1とf2はテーブルの2つのコピーに付けた別名)を含めてください
自分で試してみよう
-- 1行に異なる2人を表示できるように、テーブルを自己結合する
SELECT ____ AS friend1, ____ AS friend2
FROM friends f1
JOIN friends f2 ON ____
-- 互いを指し合っているペアだけを残す
WHERE ____ AND f1.id < f2.id;このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: SQLプレイグラウンド