Что вы понимаете под Self Join? Приведите примеры.
Self Join — это соединение таблицы с самой собой. Используется, когда нужно сравнить строки одной таблицы или найти связи внутри неё.
Особенности:
Таблица упоминается дважды с разными алиасами.
Логически воспринимается как "две разные таблицы", хотя фактически одна.
Применяется для иерархий, поиска связей, сравнения строк.
Примеры
1. Иерархия сотрудников (менеджер — подчинённый)
Есть таблица employees
:
id
name
manager_id
1
Иван
NULL
2
Анна
1
3
Пётр
1
4
Ольга
2
Запрос, чтобы показать сотрудника и его менеджера:
SELECT e.name AS employee,
m.name AS manager
FROM employees e
LEFT JOIN employees m
ON e.manager_id = m.id;
Результат:
employee
manager
Иван
NULL
Анна
Иван
Пётр
Иван
Ольга
Анна
2. Поиск "дубликатов" по какому-то полю
Например, хотим найти сотрудников с одинаковыми именами:
SELECT a.id, a.name, b.id, b.name
FROM employees a
JOIN employees b
ON a.name = b.name
AND a.id <> b.id;
3. Сравнение значений в одной таблице
Например, у нас таблица flights
с городами отправления и прибытия. Найдём "обратные рейсы":
SELECT f1.departure, f1.arrival, f2.departure, f2.arrival
FROM flights f1
JOIN flights f2
ON f1.departure = f2.arrival
AND f1.arrival = f2.departure;
Last updated
Was this helpful?