Menu
Coddy logo textTech

Повторение - Самосоединение

Часть раздела Основы путешествия по SQL на Coddy. Урок 47 из 72.

challenge icon

Задание

Сложно

Доступные таблицы и столбцы:

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

Для каждого человека в таблице friends найдите все связи через друга (friend-of-friend). Связь через друга возникает, когда человек A дружит с человеком B, который, в свою очередь, дружит с человеком C. Выведите эти связи в виде трех столбцов:

  • friend1: исходный человек
  • friend2: его прямой друг
  • friend3: друг его друга

Правила:

  • Не включайте случаи, когда friend3 — это тот же человек, что и friend1
  • Отсортируйте результаты по имени friend1 в порядке убывания

Пример: если Alice дружит с Bob, а Bob дружит с Carol, то Alice-Bob-Carol будет допустимой связью через друга.

Попробуйте сами

-- Соедините таблицу с самой собой дважды, чтобы одна строка содержала цепочку из трёх человек
SELECT ____ AS friend1, ____ AS friend2, ____ AS friend3
FROM friends f1
JOIN friends f2 ON ____
JOIN friends f3 ON ____
-- Отбросьте цепочки, которые замыкаются на человека, с которого они начались
WHERE ____
ORDER BY ____ DESC;

Все уроки раздела Основы

Потренируйтесь самостоятельно: Песочница SQL