【问题标题】:Marking possible duplicates as distinct将可能的重复标记为不同
【发布时间】:2016-11-09 11:46:54
【问题描述】:

我有一个查询,要显示具有相同 firstnamelastname 的电话簿条目列表中的潜在重复项。然后,用户可以在进一步检查元数据后合并可疑重复项。

我不太清楚的是如何有一种方法将对标记为不同而不是重复。

我打算创建一个表来列出不重复的对,但我找不到将这些从生成的可疑重复列表中排除的方法。 列表的 SQL 如下。我想知道返回这个然后在代码中运行它,但仍然不太确定,我想知道是否有人有一个有效的解决方案。

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

我在 MySQL 和 C# 中执行此操作,但原则应适用于任何语言。

【问题讨论】:

  • 您在寻找与上述 sql 查询等效的 linq 吗?如果是这样,请提供您尝试过的 linq。
  • 您好 viki888 感谢您的提问,抱歉,不清楚。不,我只是想知道一旦创建了可能的重复列表,我是否应该使用 LINQ 或其他方法来排除标记为不重复的对。
  • 我想这就是他要问的...数据库中有两个同名的人(A 和 B)。系统认为他们可能是同一个人(重复),但用户知道他们是不同的人,所以她以某种方式将他们标记为唯一。然后将再次具有相同名称的人 C 添加到数据库中。系统应该能够标记出人 C 可能是 A 或 B 的副本,但也知道 A 和 B 不是同一个人。
  • AFAIK,用你已经拥有的列是不可能的。为此,您需要在表中添加一列。当管理员或版主查看可能的重复项时,他需要将其标记为非重复项,并且需要将其存储在让我们称之为is_distinct 列。
  • e4c5 你是个天才,谢谢 - 我想我需要将配对标记为不同的,但当然你不需要 - 我现在觉得有点愚蠢 - 想太聪明了跨度>

标签: mysql linq duplicates


【解决方案1】:

感谢 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 1970-01-01
    相关资源
    最近更新 更多