Рекурсивное соединение
Рекурсивное соединение используется для связывания данных внутри одной таблицы. Оно позволяет анализировать взаимосвязи внутри одной и той же таблицы. Этот тип соединения часто применяется для работы с иерархическими структурами, например, для построения дерева сотрудников или анализа цепочки заказов.
Применение рекурсивного соединения в базе данных
Рассмотрим практический пример рекурсивного соединения в базе данных "Борей" (Northwind), где необходимо вывести заказы клиентов, принятые и выполненные в один день.
Создание запроса с рекурсивным соединением
Для создания такого запроса будем использовать таблицу "Заказы" (Orders).
- Создайте новый запрос и добавьте в него таблицу "Заказы" (Orders).
- Добавьте в запрос копию таблицы, повторно нажав кнопку Добавить (Show Table). Access автоматически присвоит копии имя "Заказы_1". Закройте окно Добавление таблицы (Show Table).
- Перетащите поле "ДатаРазмещения" (OrderedDate) из таблицы "Заказы" на поле "ДатаИсполнения" (ShippedDate) таблицы "Заказы_1". Access автоматически создаст соединение (рис. 4.29).
Рис. 4.29. Запрос с рекурсивным соединением
Настройка параметров запроса
- Перетащите в бланк запроса поля "КодЗаказа" (OrderID), "КодКлиента" (CustomerID) и "ДатаРазмещения" (OrderedDate) из таблицы "Заказы" в первые три столбца.
- Так как рекурсивные соединения могут дублировать данные, задайте вывод только уникальных значений. Для этого дважды щёлкните по свободной области верхней части окна запроса. В открывшемся окне Свойства запроса (Query Properties) установите параметр Уникальные значения (Unique Values) в "Да" (Yes) (рис. 4.30).
Рис. 4.30. Диалоговое окно Свойства запроса
Сортировка и выполнение запроса
- Установите сортировку по убыванию для поля "ДатаИсполнения" (ShippedDate), чтобы последние выполненные заказы отображались первыми.
- Нажмите кнопку Запуск (Run), чтобы получить таблицу заказов, в которых даты размещения и выполнения совпадают.
Дополнительные возможности рекурсивных соединений
Помимо поиска заказов, принятых и выполненных в один день, рекурсивные соединения могут быть полезны в следующих случаях:
- Анализ иерархических структур, например, организация отдела с подчинёнными сотрудниками.
- Поиск дубликатов записей в таблице.
- Анализ цепочки заказов для определения зависимости между ними.
Альтернативные способы работы с иерархическими данными
В Microsoft Access рекурсивные соединения используются редко, так как для работы с иерархическими данными часто применяются альтернативные методы:
- Использование самоссылочных таблиц, где каждая запись ссылается на родительскую запись.
- Хранение данных в древовидной структуре с указанием уровней вложенности.
- Работа с запросами SQL Server, где можно использовать рекурсивные общие табличные выражения (CTE).
Заключение
Рекурсивные соединения позволяют анализировать связи внутри одной таблицы. Однако в Microsoft Access их применение ограничено, так как существуют альтернативные методы обработки таких данных. В большинстве случаев для связи таблиц удобнее использовать традиционные отношения "один-ко-многим" или "многие-ко-многим".