Menu
Coddy logo textTech

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

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

Самообъединения (self-joins) — это особый тип объединений. До этого момента мы обсуждали объединение нескольких таблиц, но самообъединение — это когда таблица объединяется сама с собой. Классический пример — таблица employees.

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
1МинкеТемур
2ТемурТатьяна
3ТатьянаМаринела
challenge icon

Задание

Средне

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

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

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

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

Шпаргалка

Self-join (самообъединение) позволяет объединять таблицу саму с собой, используя псевдонимы таблиц. Это полезно, когда вам нужно сравнить строки внутри одной и той же таблицы или установить связи между записями в одной таблице.

Базовый синтаксис self-join:

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

Ключевые моменты:

  • Используйте разные псевдонимы (например, e1, e2) для одной и той же таблицы
  • Условие объединения связывает связанные поля между псевдонимами
  • Полезно для иерархических данных, таких как отношения сотрудник-менеджер

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

quiz iconПроверьте себя

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

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