Поиск несовпадающих записей

Рано или поздно возникает проблема поиска записей одной таблицы, для которых нет соответствующих записей в другой таблице. Например, может возникнуть необходимость синхронизировать таблицы, которые случайно или намеренно заполнялись разными операторами независимо друг от друга. Для решения этой стандартной проблемы в поставку Microsoft Access входит соответствующий мастер. Для иллюстрации работы с вышеупомянутым мастером попробуем найти записи о клиентах из таблицы Клиенты, для которых не было выписано ни одного заказа, Нажмите кнопку Создать окна базы данных и в диалоговом окне Новый запрос выберите пункт Записи без подчиненных. На экране будет отображено первое окно мастера (см. рис. 2.10(а)). В этом окне нужно из списка выбрать таблицу, в которой необходимо найти записи, не имеющие соответствующих в другой таблице.

Выберите таблицу Клиенты и нажмите кнопку Далее. Следующее окно мастера аналогично первому и предназначено для указания второй таблицы. Выберите здесь таблицу Заказы и снова нажмите кнопку Далее. Таким образом, мы указали мастеру, что собираемся искать записи таблицы Клиенты, для которых нет соответствия в таблице Заказы. Снова нажмите кнопку Далее. В третьем окне мастера представлены два списка, в которых содержатся поля выбранных перед этим таблиц (см. рис. 2.10(б)). В этом окне нужно выбрать поля обеих таблиц, используемых для сопоставления (т.е. поля, при помощи которых таблицы будут связаны между собой). Если между таблицами установлены постоянные связи по каким-либо полям, то эти поля автоматически предлагаются мастером. В нашем случае мастер предложит связать таблицы по полям КодКлиента. Оставьте все как есть и нажмите кнопку Далее. В четвертом окне мастера выберите поля, которые должны присутствовать в результирующем запросе (например, КодКлиента, Название, Город), и нажмите кнопку Далее. В последнем окне мастера можно указать имя для созданного запроса. Полученный запрос представлен на рис. 2.11.

Рис. 2.10. Первое и третье окно мастера Поиск несовпадающих записей.

Рис 2.11. Запрос для поиска несовпадающих записей.

Пояснения

а). Обратите внимание на рис. 2.11. Линия связи между таблицами Клиенты и Заказы имеет несколько необычный вид. Со стороны таблицы Заказы линия связи оканчивается стрелкой. Таким образом, обозначаются связи, имеющие внешний тип объединения. В частности, в описываемом примере мастер сформировал левое внешнее объединение.

Это означает, что в итоговую выборку попадут все записи из таблицы Клиенты и только те записи из таблицы Заказы, для которых связанные поля обеих таблиц совпадают. Итоговая выборка будет содержать как поля таблицы Клиенты, так и поля таблицы Заказы. Однако в записях, содержащих незадействованных клиентов, поля из таблицы Заказы будут содержать значение Null (т.е., другими словами, не будут содержать никаких значений). Задав для одного из этих полей условие Is Null, мы получим список клиентов, для которых нет связанных записей в таблице Заказы.

б). Условие Is Null, указанное для поля, означает, что отбираться будут только те записи, в которых это поле не содержит никакого значения (имеет значение Null). Если необходимо решить противоположную задачу, т.е. в итоговой выборке должны быть только те записи, в соответствующем поле которых обязательно содержится какое-нибудь значение, используйте конструкцию Is Not Null.

в). Левое внешнее объединение таблиц указывается в SQL-операторе в предложении FROM. Для этого используются ключевые слова LEFT JOIN. Если вы хотите, чтобы в итоговую выборку попали все записи из таблицы Заказы и только связанные записи из таблицы Клиенты, в предложении FROM нужно указать конструкцию RIGHT JOIN (правое внешнее объединение). Хотя в данной ситуации такой тип объединения не имеет смысла.


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



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