Самостоятельное объединение в PostgreSQL

Данная статья относится к циклу статей, посвященных PostgreSQL. В предыдущей статье мы говорили о левом объединении PostgreSQL. Теперь же мы углубимся в изучение самообъединения, именуемого Self-Join, при помощи которого мы будем сравнивать строки в одной и той же таблице.
Введение в запрос self-join в PostgreSQL#
Self-join — это запрос, в котором таблица объединяется сама с собой. Самообъединение необходимо для сравнения значений в столбце строк в одной и той же таблице.
Чтобы сформировать запрос self-join, вы указываете одну и ту же таблицу дважды под разными псевдонимами, настраиваете сравнение и исключаете случаи, когда значение будет равно самому себе.
Следующий запрос отображает, как таблица А объединяется сама с собой:
Объединение происходит посредством условия INNER JOIN. Обратите внимание, что вы также можете использовать условия LEFT JOIN или RIGHT JOIN.
Примеры использования запроса self-join в PostgreSQL#
1) Пример запроса к иерархическим данным#
Для наглядности воспользуемся примером таблицы.
Предположим, что у нас есть следующая структура организации:

Следующий SQL-скрипт создаёт таблицу employee (сотрудников) и заносит в неё некоторые данные:
Значение в столбце manager_id отображает менеджера, которому подчиняется сотрудник. Если значение в столбце manager_id принимает null, значит сотрудник никому не подчиняется. Другими словами, данный сотрудник является старшим менеджером.
Чтобы определить кто и кому подчиняется, используйте следующий запрос:
Данный запрос дважды ссылается на таблицу employee, сначала как сотрудник, затем как менеджер. Здесь псевдоним e используется для сотрудника, а m для менеджера.
Предикат объединения находит пару “сотрудник/менеджер”, сопоставляя значения в столбцах employee_id и manager_id.

Как вы можете видеть на скриншоте выше, старший менеджер не появился в выводе.
Чтобы включить старшего менеджера в набор результатов, используйте условие LEFT JOIN вместо INNER JOIN, как показано в следующем запросе:

2) Пример сравнения строк одной и той же таблицы#
Воспользуемся таблицей film из базы данных DVD-проката:

Следующий запрос находит все пары фильмов одинаковой длины:

Данный запрос объединил таблицу film с самой собой. Предикат объединения соответствует различным фильмам, указанным в film_id, которые имеют одинаковую длину.
Итак, мы научились сравнивать строки в одной и той же таблице, используя запрос Self-Join, а в следующий раз мы поговорим о полном внешнем объединении.
Когда использовать Self Join в MySQL и примеры
Добавить в избранное
Главное меню » Базы данных » MySQL » Когда использовать Self Join в MySQL и примеры

Из этой статье Вы узнаете, как использовать самосоединение в MySQL для слияния таблицы с самой собой и создания настраиваемых данных.
Основное использование
Self Join в MySQL использует псевдонимы таблиц, чтобы гарантировать, что вы не повторяете одну и ту же таблицу более одного раза в одном операторе.
Общий синтаксис использования самосоединения аналогичен синтаксису при объединении двух таблиц. Однако мы используем псевдонимы таблиц. Рассмотрим запрос, показанный ниже:
Примеры использования
Давайте воспользуемся примерами, чтобы понять, как выполнять самостоятельное присоединение к MySQL. Предположим, у вас есть база данных со следующей информацией (см. Полный запрос ниже)
Мы начнем с ВНУТРЕННЕГО (INNER JOIN) соединения и, наконец, с левого соединения.
Self Join с помощью INNER JOIN
Приведенный ниже запрос выполняет INNER JOIN с таблицей, созданной выше.
Self Join с использованием LEFT JOIN
Пример запроса ниже объясняет, как мы можем использовать самостоятельное соединение с левым соединением.
Заключение
В этой статье вы узнали, как можно использовать Self Join в MySQL для соединения таблицы с самим собой.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Присоединить таблицу к самой себе
![]()
Всё ещё ищете ответ? Посмотрите другие вопросы с метками sql postgresql join или задайте свой вопрос.
Site design / logo © 2022 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2022.6.10.42345
Нажимая «Принять все файлы cookie», вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.