Прежде всего, я на несколько лет удален из MS-Access, поэтому я постараюсь сохранить свой SQL Generic. Я бы рассмотрел этот псевдокод, цель которого - сообщить о шагах по достижению цели удаления клиентов-обманщиков.
Шаг 1. Обновите идентификаторы клиентов в таблице посещаемости событий, чтобы они соответствовали минимальному идентификатору клиента для дублированных записей клиентов
Единственная хитрость здесь - это группировка всех клиентов и использование агрегатной функции MIN
для определения наименьшего-ClientID для каждого клиента.
UPDATE EventAttendance set ClientID = C2.ClientID
FROM
EventAttendance as E
INNER JOIN Clients as C1 on C1.ClientID = E.ClientID
-- Re-Join with Clients to obtain the Minimum ClientID per Client
INNER JOIN (Select Min(ClientID) as MinClientID FROM Clients GROUP BY ClientName) as C2 on C1.ClientName = C2.ClientName
Шаг 2, Удалить все записи, кроме первой, для каждого клиента
Шаг 1 удалил все ссылки на клиентов с дублированием, поэтому мы можем свободно удалять дубликаты.
DELETE FROM Clients
WHERE ClientID not in
-- If the current record's ClientID is not in the following, then it is a dupe that is OK to be deleted
(Select Min(ClientID) as MinClientID FROM Clients GROUP BY ClientName)
Примечания
- Выше предполагается, что ClientName является уникальным для каждого человека. Если это не очень хорошее поле, вы можете попробовать адрес электронной почты или объединение нескольких записей, чтобы установить уникальность.
- После исправления данных добавить ограничение уникальности в столбцы Имя клиента или Адрес электронной почты (предпочтительно)