Причина, по которой запрос поиска дубликатов не позволит вам удалить записи, заключается в том, что это в основном просто совокупный запрос, он подсчитывает количество найденных дубликатов и возвращает случаи, когда число превышает 1.
Учтите, что если вы сделали запрос на удаление, основанный на поиске дубликатов, он удалил бы все строки, имеющие дублирующиеся значения, что, возможно, не то, что вам нужно. Вы хотите удалить все, кроме одного из дубликатов.
Вы должны попытаться удалить все дубликаты записи, кроме одной, за исключением столбца идентификатора в вашем сравнении. Я предлагаю самый простой способ сделать это - сделать запрос рабочей таблицы ко всем уникальным значениям (Выбрать различимое поле 1, поле 2 ... из MyTable) вместо каждого поля , за исключением для поля ID, используя результаты в a, чтобы создать новую таблицу из приблизительно 2000 записей (если половина является дубликатами).
Затем создайте столбец идентификатора в новой таблице, используйте запрос на обновление, чтобы обновить этот идентификатор до первого соответствующего идентификатора в исходной таблице (вы можете сделать это, используя DLookup , , который будет вернуть первое значение EXPRESSION, где CRITERIA имеет значение true в DOMAIN ).
Функция DLookup () возвращает один
значение из одного поля, даже если больше
чем одна запись удовлетворяет
критерии. Если ни одна запись не удовлетворяет
критерии, или если домен не содержит
записи, DLookup () возвращает ноль.
Поскольку вы идентифицируете первый соответствующий идентификатор на основе всех других полей, которые являются уникальными значениями, несопоставленные идентификаторы будут принадлежать дубликатам. Вы будете изменять отношение PK, идентифицируя первый соответствующий ключ с учетом набора уникальных полей. После этого вы должны установить идентификатор для PK. Конечно, это предполагает, что идентификатор не имеет внутреннего значения, и вам не нужно хранить один конкретный идентификатор для данной дублированной строки над любым из идентификаторов, принадлежащих другим дублированным строкам. Это предполагает, что вы заботитесь о данных в столбце идентификатора, поэтому вы хотите сохранить их для всех оставшихся строк, в противном случае просто проигнорируйте шаг DLookup и выполните команду «Выбрать различие» для всех столбцов, кроме идентификатора.