Имам интересен проблем и логиката ми не отговаря на задачата.
Имаме таблица, която понякога създава дублиращи се записи (по причини, свързани с процеса, и това е неизбежно). Вземете следния пример:
id FirstName LastName PhoneNumber email
-- --------- -------- ------------ --------------
1 John Doe 123-555-1234 [email protected]
2 Jane Smith 123-555-1111 [email protected]
3 John Doe 123-555-4321 [email protected]
4 Bob Jones 123-555-5555 [email protected]
5 John Doe 123-555-0000 [email protected]
6 Mike Roberts 123-555-9999 [email protected]
7 John Doe 123-555-1717 [email protected]
Намираме дубликатите по следния начин:
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 [email protected]
3 John Doe 123-555-4321 [email protected]
5 John Doe 123-555-0000 [email protected]
7 John Doe 123-555-1717 [email protected]
Както можете да видите, въз основа на FirstName
и LastName
, всички записи са дубликати.
В този момент всъщност се обаждаме по телефона на клиента, за да изчистим потенциални дубликати.
След като направим това, ние научаваме (например), че записи 1 и 3 са истински дубликати, но записи 5 и 7 всъщност са напълно две различни лица.
Така че ние обединяваме всички външно свързани данни от записи 1 и 3 в запис 1, премахваме запис 3 и оставяме записи 5 и 7 сами.
Ето къде идва проблемът:
Следващия път, когато изпълним отново заявката за „дубликати“, тя ще съдържа следните редове:
id FirstName LastName PhoneNumber email
-- --------- -------- ------------ --------------
1 John Doe 123-555-4321 [email protected]
5 John Doe 123-555-0000 [email protected]
7 John Doe 123-555-1717 [email protected]
Всички те изглеждат дубликати, въпреки че по-рано сме разбрали, че не са.
Как бихте определили, че тези записи не са дубликати?
Първият ми опит е да създам справочна таблица, идентифицираща кои записи не се дублират един на друг (например {1,5}, {1,7}, {5,7}), но нямам представа как да създам заявка, която ще може да използва тези данни.
Освен това, ако се покаже друг дублиран запис, той може да е дубликат на 1, 5 или 7, така че ще трябва всички те да се показват обратно в списъка с дубликати, така че лицето за обслужване на клиенти да може да се обади на лицето в новия запис да разберете на кой запис може да е дубликат.
Напрегнат съм до краен предел, опитвайки се да разбера това. Някакви брилянтни гении там, които биха искали да се справят с това?