У меня есть интересная проблема, и моя логика не соответствует задаче.
У нас есть таблица, в которой иногда создаются дублированные записи (по причинам процесса, и это неизбежно).Возьмем следующий пример:
id FirstName LastName PhoneNumber email
-- --------- -------- ------------ --------------
1 John Doe 123-555-1234 jdoe@gmail.com
2 Jane Smith 123-555-1111 jsmith@foo.com
3 John Doe 123-555-4321 jdoe@yahoo.com
4 Bob Jones 123-555-5555 bob@bar.com
5 John Doe 123-555-0000 jdoe@hotmail.com
6 Mike Roberts 123-555-9999 roberts@baz.com
7 John Doe 123-555-1717 wally@domain.com
Мы находим дубликаты следующим образом:
SELECT c1.*
FROM `clients` c1
INNER JOIN (
SELECT `FirstName`, `LastName`, COUNT(*)
FROM `clients`
GROUP BY `FirstName`, `LastName`
HAVING COUNT(*) > 1
) AS c2
ON c1.`FirstName` = c2.`FirstName`
AND c1.`LastName` = c2.`LastName`
. Создается следующий список дубликатов:
id FirstName LastName PhoneNumber email
-- --------- -------- ------------ --------------
1 John Doe 123-555-1234 jdoe@gmail.com
3 John Doe 123-555-4321 jdoe@yahoo.com
5 John Doe 123-555-0000 jdoe@hotmail.com
7 John Doe 123-555-1717 wally@domain.com
Как вы можетесм., основываясь на FirstName
и LastName
, все записи являются дубликатами.
На этом этапе мы фактически звоним клиенту по телефону, чтобы выяснить возможные дубликаты.
После этого мы узнаем (например), что записи 1 и 3 являются реальными дубликатами, но записи 5 и 7 фактически являются двумя разными людьми.
Таким образом, мы объединяем любые посторонние данные из записей 1 и 3 взапись 1, удалите запись 3 и оставьте записи 5 и 7.
Теперь возникла проблема:
В следующий раз, когда мы повторно запустим ""дубликаты", он будет содержать следующие строки:
id FirstName LastName PhoneNumber email
-- --------- -------- ------------ --------------
1 John Doe 123-555-4321 jdoe@gmail.com
5 John Doe 123-555-0000 jdoe@hotmail.com
7 John Doe 123-555-1717 wally@domain.com
Все они выглядят как дубликаты, даже если мы ранее признавали, что это не так.
КакВы бы пошли на выявление того, что эти записи не дублируютlicates?
Моим первым делом было создание таблицы поиска, определяющей, какие записи не являются дубликатами друг друга (например, {1,5}, {1,7}, {5,7}), но я понятия не имею, как создать запрос, который мог бы использовать эти данные.
Далее, если появляется другая дублирующаяся запись, это может быть дубликат 1, 5 или 7,поэтому нам нужно, чтобы они все были показаны в списке дубликатов, чтобы специалист по обслуживанию клиентов мог позвонить этому человеку в новой записи, чтобы выяснить, к какой записи он может быть дубликатом.
Я растянут кпредел пытается понять это.Есть ли какие-нибудь блестящие гении, которые хотели бы покончить с этим?