← Назад к вопросам
Что такое self-join и когда он используется?
2.0 Middle🔥 171 комментариев
#SQL и базы данных
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Self-Join (самосоединение таблицы)
Определение
Self-Join — это операция соединения таблицы с самой собой. Синтаксически это выглядит как обычный JOIN, но обе части соединения ссылаются на одну и ту же таблицу. Для этого используются разные алиасы таблицы, чтобы различать левую и правую части соединения.
Синтаксис
SELECT a.column1, b.column2
FROM table_name a
JOIN table_name b ON a.key = b.key AND a.id != b.id;
Ключевой момент: одна и та же таблица используется дважды с разными алиасами (a и b).
Типичные случаи использования
1. Иерархические данные
Наиболее частый случай — работа с иерархией, например, структурой компании:
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
name VARCHAR(100),
manager_id INT
);
SELECT
e.name AS employee_name,
m.name AS manager_name
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.employee_id;
2. Поиск дубликатов
SELECT
e1.employee_id,
e1.name,
e2.employee_id,
e2.name
FROM employees e1
JOIN employees e2
ON e1.salary = e2.salary
AND e1.employee_id < e2.employee_id;
3. Поиск связанных объектов
SELECT
f1.user_id,
f2.friend_id
FROM friendships f1
JOIN friendships f2 ON f1.friend_id = f2.user_id
WHERE f1.user_id = 123;
Производительность
Для оптимизации self-join важно создавать индексы на колонках JOIN:
CREATE INDEX idx_employees_manager_id ON employees(manager_id);
Self-Join используется для работы с иерархиями, поиска дубликатов и сравнения записей в одной таблице. Это мощный инструмент в арсенале Data Engineer.