Запрос на удаление с применением внешнего объединения таблиц

В процессе заполнения информационной базы в таблице Клиенты могут появиться записи о клиентах, надежда на сотрудничество с которыми не оправдалась. Чтобы не засорять базу данных ненужной информацией, можно создать запрос на удаление таких записей. Формально задание формулируется так: удалить из таблицы Клиенты записи о тех клиентах, для которых нет заказов в таблице Заказы.

Откройте новый запрос в режиме конструктора и добавьте в него таблицы Клиенты и Заказы. Конструктор запросов автоматически отобразит связь типа один-ко-многим, существующую на уровне базы данных. Из контекстного меню линии связи выберите пункт Параметры объединения и затем в окне параметров объединения установите переключатель в значение: Объединение ВСЕХ записей из Клиенты и только тех записей из Заказы, в которых связанные поля совпадают. Вид линии связи таблиц после этого изменится — появится стрелка, упирающаяся в изображение таблицы Заказы. Из контекстного меню запроса выберите пункт Тип запроса | Удаление. В первом поле бланка запроса из выпадающего списка нужно выбрать Клиенты.*. Затем из таблицы Заказы перетащите в бланк запроса поле КодКлиента и задайте для него в строке Удаление значение Условие, а в строке Условие отбора значение Is Null.

Теперь можно просмотреть все записи, подлежащие удалению. Для этого, не выходя из конструктора запросов, нужно переключиться в режим таблицы. Microsoft Access создаст временный набор данных, состоящий из всех тех записей, которые должны быть удалены, и выведет его на экран в режиме таблицы.

Однако, если запустить только что созданный запрос на выполнение, Microsoft Access выдаст сообщение об ошибке: Невозможно удаление записей из указанных таблиц и записи, соответственно, удалены не будут. Для того чтобы запрос работал, необходимо в режиме конструктора в зоне таблиц щелкнуть правой клавишей мыши и из контекстного меню выбрать пункт Свойства, после чего установить свойство запроса Уникальные записи в значение Да. Теперь запрос сработает правильно, и нужные записи будут удалены.

Созданный запрос изображен на рис. 3.3.

Рис. 3.3. Запрос на удаление с применением внешнего объединения.

Пояснения

а). В вышеприведенном примере использовалось левое внешнее объединение.Это значит, что отбирались все записи из таблицы Клиенты и те записи из таблицы Заказы, связанные поля которых в обеих таблицах совпадают. Поэтому в итоговой выборке поле КодКлиента из таблицы Заказы принимает значение Null в случае, если для него нет соответствующего значения в таблице Клиенты.

б). Значение Да свойства запроса Уникальные записи означает, что отбираться будут только уникальные записи в обеих связанных таблицах. Для запросов на удаление, содержащих несколько связанных таблиц, это свойство всегда должно иметь значение Да. В запросах с одной таблицей это свойство игнорируется. Свойства запроса Уникальные записи и Уникальные значения не могут одновременно принимать значение Да— хотя бы одно из них должно быть установлено в Нет.

в). В SQL-операторе значению Да свойства запроса Уникальные записи соответствует ключевое слово DISTINCTROW.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: