2016-11-09 2 views
0

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

То, что я не могу решить, заключается в том, как иметь способ маркировки пар как отдельных, а не дублирующих.

Я собирался создать таблицу, в которой отображаются пары, которые не являются дубликатами, но я не могу найти способ исключить их из сгенерированного подозрительного дублированного списка. Ниже приведен список SQL для списка. Я задавался вопросом о том, чтобы вернуть это, а затем запустить его в коде, но все же не совсем уверен, и я задавался вопросом, есть ли у кого-то эффективное решение.

SELECT p.*, COUNT(DISTINCT p.PersonId) AS num 
FROM people p 
GROUP BY CONCAT(p.FirstName, ' ', p.LastName) 
HAVING num>1 

Я делаю это в MySQL и C#, но принципы должны применяться к любому языку.

+0

Вы ищете linq, эквивалентную вышеуказанному запросу sql? Если да, то предоставите свой linq, который вы опробовали. – Viki888

+0

Привет viki888 спасибо за то, что спросили и извините, что было непонятно. Нет, я просто задавался вопросом, следует ли мне использовать LINQ или какой-либо другой метод, чтобы исключить пары, помеченные как дубликаты, после создания списка возможных дубликатов. – DuncanOppaz

+0

Я думаю, что это то, о чем он спрашивает ... У вас есть два человека в базе данных (A и B), имеющих одно и то же имя. Система думает, что они могут быть одним и тем же человеком (дубликат), но пользователь знает, что они разные люди, поэтому она отмечает их каким-то образом как уникальные. Затем в базу данных добавляется человек C, который снова имеет то же имя. Система должна иметь возможность отмечать, что человек C может быть дубликатом A или B, но также знать, что A и B не являются одним и тем же лицом. – philwilks

ответ

0

Благодаря e4c5, на это теперь можно ответить.

Я сосредоточился на том факте, что мы маркировали пары как дубликаты, чтобы иметь возможность идентифицировать потенциальные будущие дубликаты.

Поскольку e4c5 указывает на простой дополнительный столбец, is_distinct будет делать, а затем маркировать пару подозреваемых дубликатов как истинных.

Для нового списка подозреваемых дубликатов Я запускаю SQL как прежде, а затем получаю список имен с подозрительными дубликатами и поиск записей с этими комбинациями имен, но они не помечены как is_distinct. Пример кода C# и запроса MySQL ниже:

var peoplenames = peoplelist.Select(p=>p.FirstName + " " + p.LastName); 
var joinedpeoplenames = string.Join("','", peoplenames); 

SELECT p.* 
FROM people p 
WHERE CONCAT(p.FirstName,' ',p.LastName) IN ('?joinedpeoplenames') 
GROUP BY p.PersonId