Создание Self-Joins вручную (визуальные инструменты для баз данных)
применимо к:SQL Server
Вы можете присоединить таблицу к самой себе, даже если таблица не имеет рефлексивной связи в базе данных. Например, вы можете использовать самосоединение для поиска пар авторов, живущих в одном городе.
Как и при любом соединении, самосоединение требует не менее двух экземпляров таблицы. Разница заключается в том, что вместо добавления второй таблицы в запрос добавляется второй экземпляр той же таблицы. Таким образом, можно сравнить столбец в первом экземпляре таблицы с тем же столбцом во втором экземпляре, что позволяет сравнивать значения в столбце друг с другом. конструктор запросов и представлений назначает псевдоним второму экземпляру таблицы.
Например, при создании самосоединения для поиска всех пар авторов в Беркли вы сравниваете столбец city
в первом экземпляре таблицы с столбцом city
во втором экземпляре. Результирующий запрос может выглядеть следующим образом:
SELECT
authors.au_fname,
authors.au_lname,
authors1.au_fname AS Expr2,
authors1.au_lname AS Expr3
FROM
authors
INNER JOIN
authors authors1
ON authors.city
= authors1.city
WHERE
authors.city = 'Berkeley'
Для создания самосоединения часто требуется несколько условий соединения. Чтобы понять, почему рассмотрим результат предыдущего запроса:
Cheryl Carson Cheryl Carson
Abraham Bennet Abraham Bennet
Cheryl Carson Abraham Bennet
Abraham Bennet Cheryl Carson
Первая строка бесполезна; это означает, что Шерил Карсон живет в том же городе, что и Шерил Карсон. Вторая строка одинаково бесполезна. Чтобы устранить эти бесполезные данные, добавьте другое условие, сохраняющее только те строки результатов, в которых два имена авторов описывают разных авторов. Результирующий запрос может выглядеть следующим образом:
SELECT
authors.au_fname,
authors.au_lname,
authors1.au_fname AS Expr2,
authors1.au_lname AS Expr3
FROM
authors
INNER JOIN
authors authors1
ON authors.city
= authors1.city
AND authors.au_id
<> authors1.au_id
WHERE
authors.city = 'Berkeley'
Результирующий набор улучшен:
Cheryl Carson Abraham Bennet
Abraham Bennet Cheryl Carson
Но две строки результатов являются избыточными. Первый говорит Карсон живет в том же городе, что и Беннет, а второй говорит Беннет живет в том же городе, что и Карсон. Чтобы устранить эту избыточность, можно изменить второе условие соединения с "не равно" на "меньше". Результирующий запрос может выглядеть следующим образом:
SELECT
authors.au_fname,
authors.au_lname,
authors1.au_fname AS Expr2,
authors1.au_lname AS Expr3
FROM
authors
INNER JOIN
authors authors1
ON authors.city
= authors1.city
AND authors.au_id
< authors1.au_id
WHERE
authors.city = 'Berkeley'
И результирующий набор выглядит следующим образом:
Cheryl Carson Abraham Bennet
Чтобы создать самосоединение вручную
Добавьте в панель диаграммы таблицу или объект с табличным значением, с которым вы хотите работать.
Добавьте ту же таблицу еще раз, чтобы панель диаграммы отображала один и тот же объект или объект с табличным значением дважды в области диаграммы.
Конструктор запросов и представлений назначает псевдоним второму экземпляру, добавив последовательное число в имя таблицы. Кроме того, конструктор запросов и представлений создает линию соединения между двумя вхождениями табличного или табличного объекта в области диаграммы.
Щелкните правой кнопкой мыши строку соединения и выберите Свойства в контекстном меню.
В окне свойств щелкните Условие соединения и тип и щелкните многоточие (...) справа от свойства.
В диалоговом окне "Соединение" измените оператор сравнения между первичными ключами по мере необходимости. Например, вы можете изменить оператор на "меньше" (<).
Создайте дополнительное условие соединения (например, authors.zip = authors1.zip) путем перетаскивания имени основного столбца соединения в первом вхождении таблицы или табличного объекта и его перемещения на соответствующий столбец во втором вхождении.
Укажите другие параметры запроса, такие как выходные столбцы, условия поиска и порядок сортировки.
См. также
Автоматическое создание Self-Joins (Визуальные инструменты для баз данных)
Запрос с соединениями (Визуальные инструменты для баз данных)