2016-12-31 39 views
0

我有一个数据库,在那里我录制的电视节目嘉宾和情节,他们已经出现在我主要是有三个表:合并在SQL数据库类似的条目

游客(姓名,身份证)

集(日期,主题,ID)

EpisodeGuest(集ID,GuestID)

然而,经检查我发现许多客人有轻微的不同拼写他们的名字记录几次。当我从网站上浏览客人的外表时,这有点超出了我的控制范围。

例子:

Peter N. Larsson

Peter N Larsson

Peter N. Larson

这些名字现在被记录为多个客人多次出现。我怎样才能将这些合并为同一个人,而无需手动完成?客人输入姓氏和姓氏,所以在所有情况下,可以说,两个名字之间只有3个字符是不同的,它的安全(足够)可以说它是同一个客人。

是否合并这个遍历每个名​​字,在3个字符内搜索远程相似的东西并通过编辑EpisodeGuest表进行合并的最佳方式是?

回答

2

这太长了评论。

Postgres有一个名为fuzzystrmatch的模块。该模块包含可以提供帮助的功能。我的意图是建议Levenshtein距离,但您可能会发现模块中的其他功能适用于您。

我会告诉你这种方法。首先,两个名字看起来非常相似的事实并不意味着它们是同一个人。其次,您需要手动检查结果。

然而,想法是利用这样的事情让考生:

select t.name, t2.name 
from t join 
    t2 
    on levenshtein(t.name, t2.name) < 4 and -- arbitrary number 
     t.name <> t2.name;