Что вы понимаете под 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?