Отбор повторяющихся записей и записей без подчиненных
- Данный запрос имеет сложное выражение в строке Условие отбора (Criteria) поля "Название":
IN
(
SELECT
[Название]
FROM
[Клиенты]
AS
Tmp
GROUP
BY
[Название], [Адрес]
HAVING
COUNT
(*) > 1
AND
[Адрес] = [Клиенты].[Адрес])
Это выражение включает еще один запрос. Такой запрос называется подчиненным запросом (подробнее о подчиненных запросах см. разд. "Создание подчиненных запросов" в конце данной главы). Чтобы посмотреть, как полностью выглядит инструкция SQL, соответствующая этому запросу, нужно перейти в режим SQL.
Совет
Мы рекомендуем при работе с запросами в режиме Конструктора чаще открывать окно Режим SQL (SQL View). Изучая, как Access создает инструкции SQL, можно постепенно выучить этот язык. Правда, помните, что в данном случае мы имеем дело с диалектом стандартного языка SQL – Access SQL. Ниже мы расскажем, чем он отличается от стандартного языка SQL (см. разд. "Сравнение ANSI и Jet SQL" данной главы).
Такой поиск разумно выполнять также в таблицах, которые экспортированы из другой среды, например Excel. Эти таблицы могут содержать дублирующие записи, которые нужно найти и удалить. Для удаления дубликатов можно воспользоваться процедурой, которая описана в справке Access в разделе Работа с запросами › Работа с запросами на изменение › Удаление повторяющихся записей из таблицы.
Еще один мастер позволяет найти все записи в главной таблице, которые не имеют связанных записей в подчиненной таблице (обратной ситуации быть не должно, если вы правильно установили флажки, обеспечивающие целостность данных) (см. также разд. "Поддержка целостности данных" гл. 2).
Чтобы создать запрос, который покажет всех клиентов, которые не имеют заказов:
- Раскройте список запросов в окне базы данных и нажмите кнопку Создать (New). В диалоговом окне Новый запрос (New Query) выберите из списка элемент Записи без подчиненных (Find Unmatched Query Wizard). Появится диалоговое окно Поиск записей, не имеющих подчиненных (Find Unmatched Query Wizard), аналогичное окну Поиск повторяющихся записей (см. рис. 8.27).
- Выберите из списка таблицу "Клиенты" (Customers).
- Следуйте указаниям мастера, в результате чего вы получите запрос, который в режиме Конструктора может выглядеть так, как представлено на рис. 8.29.
В бланке запроса в столбце "КодКлиента" задано условие – Is Null. Это означает, что выбираются все клиенты, код которых отсутствует в таблице "Заказы" (Orders). Вы можете использовать это условие всякий раз, когда нужно отыскать записи, у которых одно из полей пусто.
Рис. 8.29. Запрос для поиска записей, не имеющих подчиненных записей