Menu
Coddy logo textTech

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

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

challenge icon

Задание

Сложно

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

  • friends: id, name, friend_id

Для каждого человека в таблице друзей найдите все имеющиеся у него связи «друг друга». Связь «друг друга» возникает, когда человек 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