Слияние данных из дубликатов клиентских записей - PullRequest
1 голос
/ 11 июня 2011

У меня есть база данных Access, которая содержит две таблицы: client и eventAttendance.Клиент хранит данные, когда клиент регистрируется впервые.EventAttendance содержит Id события, clientID и дату, когда клиент посетил событие.Повторяющиеся записи существуют в клиентской таблице.Многие клиенты имеют несколько идентификаторов клиентов.Эти clientIDs используются для регистрации событий, поэтому один и тот же отдельный клиент мог зарегистрироваться для восьми разных событий с восемью разными clientID.

Я идентифицировал клиентов в таблице клиентов с несколькими clientID, но я не уверен, какТеперь объедините записи в таблице eventAttendance.Кто-нибудь может порекомендовать, как мне следует справиться с этой ситуацией?

Таблица клиента

ClientID  Name   Email
1         Jack   Jack@gmail.com
2         Jill   Jill@gmail.com
3         Jack   Jack@gmail.com

Таблица EventAttendance

EventID   ClientID   AttendanceDate
1         1          6/1/2000
1         3          6/1/2001

Ответы [ 2 ]

1 голос
/ 11 июня 2011

Звучит как проблема с данными.

Вам понадобится уникальный идентификатор для одного клиента, который можно отобразить в таблице EventAttendance, чтобы сделать его 1-м отношением. Поскольку вы обнаружили сходство между повторяющимися записями в клиенте, создание уникального идентификатора не будет проблемой. Создайте новый столбец в таблице клиента и присвойте уникальный номер каждой дублированной записи клиента для одного и того же клиента. Теперь вам нужно написать оператор обновления, в котором вы можете обновить столбец clientAd таблицы EventAttendance новым идентификатором. Это один из способов сделать это.

После обновления вы можете удалить дубликаты записей клиентов, кроме первого, и присвоить ему уникальный идентификатор и удалить столбец Уникальный идентификатор, который был создан для идентификации одного клиента и ссылки на него в таблице EventAttendance как внешний ключ.

Но я бы предпочел, чтобы клиенты создавали дублирующиеся идентификаторы по их адресу электронной почты.

1 голос
/ 11 июня 2011

Прежде всего, я на несколько лет удален из 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 является уникальным для каждого человека. Если это не очень хорошее поле, вы можете попробовать адрес электронной почты или объединение нескольких записей, чтобы установить уникальность.
  • После исправления данных добавить ограничение уникальности в столбцы Имя клиента или Адрес электронной почты (предпочтительно)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...