我有一个查询,用于显示具有相同名字,姓氏的电话簿条目列表中的潜在重复项。然后,用户在检查了进一步的元数据后能够合并可疑的重复项。
我无法解决的问题是如何将对标记为不同而不是重复。
我打算创建一个表,列出不重复的对,但我找不到从生成的可疑重复列表中排除这些对的方法。 列表的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 :(得分: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