提问人:Lesego Zim 提问时间:6/26/2023 更新时间:6/30/2023 访问量:50
将 2 个表与包含相似数据的列联接的最佳方式
Best way to Join 2 Tables with columns containing SIMILAR data
问:
我无法将表连接在一起,2 列具有相似的数据,但数据不完全相同。
例:
表 1:第 1 列 =“预计今天天气会下雨” 表 2:第 2 列 =“预计今天天气和阴云会下雨”
我尝试使用以下方法加入,但它不是 100% 准确的:... FROM [Table1] as [one] LEFT JOIN[Table2] as [two] ON [one].[column1] LIKE '%' + [two].[column2] + '%'
模糊匹配是获得最准确匹配的最佳方式吗?或者是否有其他方法可以将表与具有相似但不完全相同的数据的列联接?
任何帮助和建议将不胜感激!
答:
在您描述的情况下,如果其中一个值不完全是另一个值的子集,则很难。
我使用 Damerau-Levenshtein 距离函数,但它实际上是为了测量印刷差异。我用它来查找街道和郊区名称中的印刷错误,因此它们是很短的字符串。我不知道这个链接是否是我曾经尝试过的链接,但我目前使用的是为 CLR 编写的链接,它的速度要快得多。如果你有很多记录,那么长时间的蜇伤可能太慢了。
也许可以考虑使用全文索引和 CONTAINS 查询来查找相似的单词模式。
我只是突然想到,但我没有调查过,Damerau-Levenshtein 距离可能能够使用整个单词而不是仅使用字符来计算。
CONTAINS 或 FREETEXT(或者更好的是 CONTAINSTABLE 或 FREETEXTTABLE)查询仍将用于缩小候选范围。使用这些全文索引解决方案的好处之一是能够自动索引单词的语法变体,例如复数和不同时态,以及指定短语中多个单词的接近程度,同时忽略无关紧要的单词,如“the”和“a”等。
我最初在 Access VBA 中实现了加权 Damerau-Levenshtein 函数的代码。它在这里,并包含指向它所基于的原始 Excel 版本的链接。将此代码转换为 VB.NET 以用作 CLR 函数并不难。
如果可以针对单词而不是字符进行修改,那么它将在单词反转、插入和省略方面进行评分,就像它基于原始函数中的字符一样。
评论