Menu
Coddy logo textTech

Recap - Self Join

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

challenge icon

チャレンジ

難しい

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

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

friends テーブルの各人物について、その人が持つすべての友達の友達(friend-of-friend)のつながりを見つけてください。友達の友達のつながりは、人物 A が人物 B と友達であり、人物 B が人物 C と友達である場合に発生します。これらのつながりを次の3つの列として一覧表示してください:

  • friend1: 起点となる人物
  • friend2: その人の直接の友達
  • friend3: 友達の友達

ルール:

  • friend3 が friend1 と同一人物である場合は含めないでください
  • 結果を friend1 の名前の降順で並べ替えてください(ORDER BY)

例: Alice が Bob と友達で、Bob が Carol と友達である場合、Alice-Bob-Carol は有効な友達の友達のつながりとなります。

自分で試してみよう

-- テーブルを自身に2回結合して、1行が3人の連鎖を保持するようにする
SELECT ____ AS friend1, ____ AS friend2, ____ AS friend3
FROM friends f1
JOIN friends f2 ON ____
JOIN friends f3 ON ____
-- 開始した人にループバックする連鎖を除外する
WHERE ____
ORDER BY ____ DESC;

基礎のすべてのレッスン

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