【发布时间】:2018-01-03 08:57:39
【问题描述】:
我问了一个类似的问题 [Querying database to find potential duplicates based on multiple columns,得到了 SQL 大师 Gordon Linoff 的友好回答。
总而言之,我有大约 10 万条客户记录,但现在才发现可能有很多重复记录 - 在大多数情况下,名字和姓氏拼写错误。
这是戈登为我写的查询...
select t
from (select t.*,
count(*) over (partition by soundex(fname), soundex(lname), dob) as cnt
from t
) t
where cnt > 1
order by dob, fname, lname;
而且效果很好 - 但是它似乎只能拉出非常接近的匹配。我试图将其更新为仅尝试匹配前三个字母,但它似乎做得并不好,它为我提供了具有相同 DOB 的更多记录,但是,名字/姓氏值不仅是前3个字母,而且基本上是混合匹配。
这就是我在 count(*) 行中尝试做的事情
count(*) over (partition by substring(soundex(fname),0,3), substring(soundex(lname),0,3), dob) as cnt
但就像我说的那样,它不会精确匹配 3 个字符,所以我得到了诸如
之类的名字Ana
Annette
有什么方法可以更新它,以便能够更深入地查找我的重复项,但只使用名字和姓氏的前 3 个字符,同时仍然使用 Soundex?或者可能不使用 Soundex?
【问题讨论】:
-
另一种方法,请参阅stackoverflow.com/questions/653157/…
-
@rd_nielsen - 谢谢
-
有一个 SQL 函数,多年前由 Keith Henry 创建,称为 DoubleMetaPhone。它比 SOUNDEX 好得多。不幸的是,代码字符太多,无法在此处发布,但 Google 搜索会很快找到。
-
可以分享一些示例数据吗?
标签: sql sql-server-2012 substring soundex