3. Укажите таблицу Заказы и нажмите кнопку Далее .
4. Выберите поля Дата , Товар , Клиент (рис. 6.33) и нажмите кнопку Готово .
Будет выведен список повторений по таблице Заказы (рис. 6.34).
Если записи различаются значениями других полей, не вошедших в выборку, возможно, лучшим способом удаления будет удаление записей вручную, ведь только вы знаете критерий, по которому можно отделить корректные записи от ошибочных.
В данном случае записи действительно полностью одинаковые, и процесс их удаления хотелось бы автоматизировать запросом. Если просто преобразовать данный запрос на выборку в запрос на удаление, то удалятся все повторяющиеся записи. Обычно все же требуется оставить по одному экземпляру записей.
Чтобы получить желаемый результат, следуйте нижеприведенным действиям.
1. Добавьте в таблицу временное поле Сохранить логического типа. Это поле будет хранить значение 1 , если запись требуется оставить, и значение 0 – если удалить.
2. Оставьте все записи с минимальным значением поля Номер . Щелкните правой кнопкой мыши на заголовке вкладки запроса. Выберите пункт контекстного меню Режим SQL .
3. Скопируйте содержимое листинга 6.16 в запрос.Листинг 6.16.
Запрос на установку флага для последующего удаления дубликатов
UPDATE Заказы
SET Сохранить = 1
WHERE [Номер (ID)] IN
(SELECT Min([Номер (ID)]) FROM Заказы GROUP BY Заказы. Дата, Заказы.
Товар, Заказы. Клиент HAVING (((Count(Дата))>1) AND
((Count(Клиент))>1)))
Как видите, запрос является запросом на обновление, но в качестве условия используется упрощенный запрос на выборку, составленный мастером запросов. Запись помечается только в том случае, если ее номер совпадает с минимальным значением номера в ее группе дубликатов.
4. Перейдите на вкладку Конструктор и выберите команду Выполнить . Откроется окно подтверждения операции обновления.
5. Нажмите кнопку Да .
6. Откройте таблицу Заказы (рис. 6.35).
Рис. 6.35. Результат выполнения запроса
Теперь осталось удалить повторяющиеся записи с неустановленным флажком.
1. Откройте мастер запросов, как было описано выше. Выберите пункт Повторяющиеся записи и нажмите кнопку ОК .
2. Добавьте поля Товар , Дата , Клиент и нажмите кнопку Далее .
3. Добавьте поле Сохранить (рис. 6.36) и нажмите кнопку Готово .
4. Щелкните правой кнопкой мыши на заголовке вкладки запроса. Выберите команду Конструктор .
5. В бланке запроса в строке Условие отбора для поля Сохранить введите 0.
6. На вкладке Конструктор в группе Тип запроса выберите команду Удаление .
Результирующий бланк запроса на удаление показан на рис. 6.37.
Текст запроса на удаление приведен в листинге 6.17.
Листинг 6.17.
Запрос на удаление дубликатов
DELETE Заказы. [Дата], Заказы. [Товар], Заказы. [Клиент],
Заказы. [Сохранить]
FROM Заказы
WHERE (((Заказы. [Дата]) In (SELECT [Дата] FROM [Заказы] As Tmp GROUP
BY [Дата],[Товар],[Клиент] HAVING Count(*)>1 And [Товар] =
[Заказы].[Товар] And [Клиент] = [Заказы].[Клиент])) AND
((Заказы. [Сохранить])=0));