sql - 加入部分匹配的表
问题描述
早上好,
我想加入两个表,但在某些情况下“名称”列不完全匹配。
例如,在 T1 中,名称为“Acosta, Joan”,但在 T2 中,名称为“Perez Acosta, Joan”或“Acosta, Manuel Joan”。
我想加入这些表的主要原因是更新 T1 中的字段。
解决方案
如果您需要检查具有不同(但相似)值的字段,则没有标准的加入方式。
您可以做的是定义一个函数,将两个值作为参数进行比较并返回两个字段之间的距离。然后您可以在连接中使用该功能,例如
SELECT *
FROM T1
INNER JOIN T2 ON distance(T1.NAME, T2.NAME) < MAX_DISTANCE_ALLOWED
如何对置信度函数进行编码是范围的方式,但您可以例如使用Levensthein distance的变体:
在信息论、语言学和计算机科学中,Levenshtein 距离是衡量两个序列之间差异的字符串度量。非正式地,两个单词之间的 Levenshtein 距离是将一个单词更改为另一个单词所需的最小单字符编辑(插入、删除或替换)次数。
推荐阅读
- php - cookie 不是由 setcookie 设置的,但有 0 个错误 (SSO)
- javascript - react-native 中的“找不到变量:点击”
- entity-framework - 在 RawSQLQuery 填充对象时关闭 PropertyChanged 事件
- python - 如何在 Python 中创建返回星期几的代码?
- jackson-databind - 如何在没有 ObjectNode 的情况下创建 ValueNode?
- ocaml - OCaml 编译类型错误,不是正确的预期函数类型
- python - Tkinter ttk:背景/前景色在我的电脑上不起作用
- unit-testing - 无法从“setup.js”中找到模块“expo-react-native-adapter”
- c++ - 有效地计算阶乘
- r - 如何在计算逐步多项式回归之前消除p值> 0.7的变量?