Как джойнить таблицу саму на себя
Перейти к содержимому

Как джойнить таблицу саму на себя

Самостоятельное объединение в 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 и примеры

FavoriteДобавить в избранное

Главное меню » Базы данных » MySQL » Когда использовать Self Join в 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.

Присоединить таблицу к самой себе

user avatar

Всё ещё ищете ответ? Посмотрите другие вопросы с метками 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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *