我有一个查询,用于显示具有相同名字、姓氏的电话簿条目列表中的潜在重复项。然后,用户可以在检查进一步的元数据后合并可疑的重复项。
我不太明白的是如何有一种方法将对标记为不同且不重复。
我打算创建一个表来列出不重复的对,但我找不到一种方法来将它们从生成的可疑重复列表中排除。 该列表的 SQL 如下。我想知道是否返回它然后在代码中运行它,但仍然不太确定,我想知道是否有人有有效的解决方案。
SELECT p.*, COUNT(DISTINCT p.PersonId) AS num
FROM people p
GROUP BY CONCAT(p.FirstName, ' ', p.LastName)
HAVING num>1
我在 MySQL 和 C# 中执行此操作,但原则应该适用于任何语言。
最佳答案
感谢 e4c5,现在这个问题得到了解答。
我开始关注这样一个事实:我们将对标记为重复项,以便能够识别 future 潜在的重复项。
正如 e4c5 指出的那样,一个简单的附加列 is_distinct 就可以完成 - 然后将一对可疑重复项标记为 true。
对于新的可疑重复项列表,我像以前一样运行 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
关于mysql - 将可能的重复标记为不同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40506248/