Self join sql что это?
В таблице сотрудников PostgreSQL есть id, name и manager_id, который ссылается на id в той же таблице. Нужно вывести сотрудника и имя начальника рядом. Я сначала хотел создать вторую таблицу начальников, но ведь начальники тоже сотрудники. То есть отдельную копию хранить вроде незачем. В примере одну таблицу пишут в FROM дважды с разными буквами, и я теряюсь, какая строка сейчас сотрудник, а какая руководитель. Еще у самого главного manager_id пустой, его тоже хочется видеть. Как такое соединение работает и не начнет ли оно связывать каждого человека с самим собой просто из-за одинакового источника?
Лучший ответ
4o
4o
Self join sql что это?
Self join означает соединение таблицы с самой собой под разными алиасами, а не создание второй хранимой копии. Для PostgreSQL пример выглядит так: SELECT e.name, m.name AS manager_name FROM training.employees AS e LEFT JOIN training.employees AS m ON m.id = e.manager_id;. Алиас e обозначает роль сотрудника, m роль его руководителя. Конкретные пары выбирает условие ON, поэтому одинаковая таблица не заставляет каждую строку соединяться только с собой. LEFT JOIN сохраняет сотрудника без найденного руководителя, выводя NULL в его полях. Проверьте уникальность id и смысл manager_id. Для всей цепочки руководителей произвольной глубины одного такого соединения уже недостаточно.