Menu
Coddy logo textTech

Self join

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

セルフ結合は different な種類の結合です。これまでは複数の table の結合について話してきましたが、セルフ結合は同じ table 同士を結合します。典型的な例としては、employees の table が挙げられます。

employee_idemployee_namemanager_id
1Minke2
2Temur3
3Tatjana4
4Marinela 

最高責任者を除き、すべての従業員にはマネージャーがおり、すべてのマネージャーもまた従業員です。

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

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

チャレンジ

中級

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

  • <strong>friends</strong>: <strong>id</strong>, <strong>name</strong>, <strong>friend_id</strong>

お互いに友達である友達のペアを見つけてください(相互の友情は、人物 A の friend_id が人物 B を指し、かつ人物 B の friend_id が人物 A を指している場合に成立します)。両方の友達の名前を単一の行に表示してください。列名は friend1 および friend2 としてください。

注意: 重複するペアが含まれないように、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プレイグラウンド