Menu
Coddy logo textTech

Самосоединение

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

Самосоединения — это другой тип соединений. До сих пор мы говорили о соединениях нескольких таблиц, но при самосоединениях таблица соединяется сама с собой. Классическим примером может служить таблица сотрудников.

employee_idemployee_namemanager_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

Мы выполняем соединение одной и той же таблицы, но в первый раз называем её e1, а во второй — e2. Соединение выполняется по полям employee_id и manager_id.

Результат:

employee_idemployee_namemanager_name
1MinkeTemur
2TemurTatjana
3TatjanaMarinela
challenge icon

Задание

Средне

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

  • friends: id, name, friend_id

Найдите пары друзей, которые являются взаимными друзьями (взаимная дружба существует, когда friend_id человека A указывает на человека B И friend_id человека B указывает на человека A). Отобразите имена обоих друзей в одной строке. Назовите столбцы friend1 и friend2.

Примечание: добавьте в предложение WHERE условие friend1.id < friend2.id, чтобы не включать дублирующиеся пары 

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

-- Соедините таблицу с самой собой, чтобы одна строка могла показать двух разных людей
SELECT ____ AS friend1, ____ AS friend2
FROM friends f1
JOIN friends f2 ON ____
-- Оставьте только пары, которые указывают друг на друга
WHERE ____ AND f1.id < f2.id;
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

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

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