Menu
Coddy logo textTech

自己結合

CoddyのSQLジャーニー「基礎」セクションの一部。レッスン 46/72。

自己結合は、異なる種類の結合です。これまで複数のテーブルを結合する方法について説明してきましたが、自己結合では同じテーブルを結合します。典型的な例として、従業員のテーブルが挙げられます。

employee_idemployee_namemanager_id
1Minke2
2Temur3
3Tatjana4
4Marinela 

最上位のマネージャーを除くすべての従業員にはマネージャーがいて、すべてのマネージャーも従業員です。

問題:各従業員について、マネージャーの名前を知りたいとします。

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_idemployee_namemanager_name
1MinkeTemur
2TemurTatjana
3TatjanaMarinela
challenge icon

チャレンジ

中級

利用可能なテーブルと列:

  • friendsidnamefriend_id

相互の友人である友人のペアを見つけてください(人物 A の friend_id が人物 B を指し、かつ人物 B の friend_id が人物 A を指している場合に、相互の友人関係が存在します)。両方の友人の名前を1行に表示してください。列名を friend1friend2 にしてください。

注:重複するペアが含まれないように、WHERE 句に条件 friend1.id < friend2.id を含めてください 

自分で試してみよう

-- テーブルを自身に結合して、1行で2人の異なる人物を表示できるようにする
SELECT ____ AS friend1, ____ AS friend2
FROM friends f1
JOIN friends f2 ON ____
-- 互いに指し示し合うペアのみを残す
WHERE ____ AND f1.id < f2.id;
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン

自分で練習してみよう: SQLプレイグラウンド