首页 > 解决方案 > 加入部分匹配的表

问题描述

早上好,

我想加入两个表,但在某些情况下“名称”列不完全匹配。

例如,在 T1 中,名称为“Acosta, Joan”,但在 T2 中,名称为“Perez Acosta, Joan”或“Acosta, Manuel Joan”。

我想加入这些表的主要原因是更新 T1 中的字段。

标签: sqlsql-serverjoinleft-joininner-join

解决方案


如果您需要检查具有不同(但相似)值的字段,则没有标准的加入方式。

您可以做的是定义一个函数,将两个值作为参数进行比较并返回两个字段之间的距离。然后您可以在连接中使用该功能,例如

   SELECT *
   FROM T1
   INNER JOIN T2 ON distance(T1.NAME, T2.NAME) < MAX_DISTANCE_ALLOWED

如何对置信度函数进行编码是范围的方式,但您可以例如使用Levensthein distance的变体:

在信息论、语言学和计算机科学中,Levenshtein 距离是衡量两个序列之间差异的字符串度量。非正式地,两个单词之间的 Levenshtein 距离是将一个单词更改为另一个单词所需的最小单字符编辑(插入、删除或替换)次数。


推荐阅读