Menu
Coddy logo textTech

Self join

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

自己結合(セルフジョイン)は、特殊な種類の結合です。これまでは複数のテーブルの結合について説明してきましたが、自己結合は同じテーブル同士を結合します。典型的な例は、employees テーブルです。

従業員ID従業員名マネージャー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

チャレンジ

中級

利用可能なテーブルとカラム:

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

相互の友人である友人のペアを見つけてください(相互の友情は、人物Aの friend_id が人物Bを指し、かつ人物Bの friend_id が人物Aを指している場合に成立します)。両方の友人の名前を1つの行に表示してください。カラム名を friend1friend2 にしてください。

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

チートシート

自己結合(セルフジョイン)を使用すると、テーブルエイリアスを使用してテーブルをそれ自体に結合できます。これは、同じテーブル内の行を比較したり、同じテーブル内のレコード間の関係を確立したりする必要がある場合に便利です。

基本的な自己結合の構文:

SELECT columns
FROM table_name AS alias1
JOIN table_name AS alias2 ON alias1.column = alias2.column

従業員とマネージャーの例:

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

主なポイント:

  • 同じテーブルに対して異なるエイリアス(例:e1e2)を使用する
  • 結合条件によってエイリアス間の関連フィールドを接続する
  • 従業員とマネージャーの関係のような階層データに便利

自分で試してみよう

quiz icon腕試し

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

基礎のすべてのレッスン