Self join
CoddyのSQLジャーニー「基礎」セクションの一部。レッスン 46/72。
セルフ結合は different な種類の結合です。これまでは複数の table の結合について話してきましたが、セルフ結合は同じ table 同士を結合します。典型的な例としては、employees の table が挙げられます。
| employee_id | employee_name | manager_id |
| 1 | Minke | 2 |
| 2 | Temur | 3 |
| 3 | Tatjana | 4 |
| 4 | Marinela |
最高責任者を除き、すべての従業員にはマネージャーがおり、すべてのマネージャーもまた従業員です。
問題点:各従業員(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_id | employee_name | manager_name |
|---|---|---|
| 1 | Minke | Temur |
| 2 | Temur | Tatjana |
| 3 | Tatjana | Marinela |
チャレンジ
中級利用可能なテーブルと列:
<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;このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
4More Keywords
The IN keywordThe BETWEEN keywordThe LIKE keywordThe AS keywordRecap - Cellphone Models2Conditions
Conditions BasicsThe AND keywordThe OR keywordThe NOT keywordMultiple Conditions CombinedParenthesisBooleans5Arithmetic Operations
Mathematical OperatorsMathematical ColumnsThe Modulo OperationThe ROUND() Function3Specific Return Format
Null valuesSort Results Part 1Sort Results Part 2Recap - Cyber Security FirmLimit number of recordsRecap - Vehicle Factory6Intro Challenges
Recap - Parliamentary ElectionRecap - Police Criminal ArrestRecap - Bar Beverage ContainerRecap - Engineer new columns自分で練習してみよう: SQLプレイグラウンド