Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
применимо к: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 AS 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 AS 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 AS 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) путем перетаскивания имени основного столбца соединения в первом вхождении таблицы или табличного объекта и его перемещения на соответствующий столбец во втором вхождении.
Укажите другие параметры запроса, такие как выходные столбцы, условия поиска и порядок сортировки.