提问人:Tristan Lutgen 提问时间:6/2/2022 最后编辑:Tristan Lutgen 更新时间:6/4/2022 访问量:689
模糊匹配具有相似级联值的 2 个 SQL 列。但是,行没有以理想的方式排列
Fuzzy Match 2 SQL columns with similar concatenated values. However, the rows are not lined up in an ideal manner
问:
首先,我想说我是 SQL 的新手。我的任务是试图找到两列的模糊匹配分数。这将帮助我的团队发现哪些数据仍然相关,哪些数据已经过时(因为模糊匹配不会返回高分,因为数据不在第二列中)。
现在是问题所在。我有两张桌子。我们称它们为 Table_A,Table_B. Table_A 有一个名为 combo_field 的列,如下所示。
combo_field |
---|
测试1 |
示例2 |
字段3 |
Table_B有一个类似的列,名为 combo,如下所示。
组合 |
---|
EXAMPLE3 |
测试1 |
领域 2 |
我希望我的输出看起来像这样。
模糊比赛比分 | combo_field | 组合 |
---|---|---|
.1 | 测试1 | 测试1 |
.2 | 示例2 | EXAMPLE2 |
.1 | 字段3 | 领域3 |
是否可以同时对combo_field列和组合列进行排序,以便值正确排列,然后返回模糊匹配分数?我不确定这是否可以一起完成,是否需要两个步骤才能解决,或者是否可以完成。任何指导将不胜感激。
编辑:
我将 SQL Server 中的两个组合字段带到了 Microsoft Excel。我通过 Microsoft Excel 下载了模糊匹配,以匹配我的两列并生成模糊匹配分数。它都对列进行了排序以排列相似的行,并给了我一个介于 1 和 0 之间的模糊匹配分数。
答:
0赞
Kurt
6/2/2022
#1
在这里,您无法通过排序来提供帮助。您只需从两列(笛卡尔连接)生成每对值,对每对运行分数函数,然后过滤掉低于所需阈值的值。像这样:
with
scores as (
select
score(a.combo_field, b.combo) as fuzzy_match_score,
a.combo_field,
b.combo
from
table_a a
cross join
table_b b
)
select
*
from
scores
where
fuzzy_match_score >= .1
这里需要注意的是,如果表非常大和/或分数函数很慢,则性能会很慢。“交叉联接”的确切语法也可能因 dbms 而异。
正如另一位评论者所指出的,如果有任何其他列可用于将表格连接在一起,那将比笛卡尔更有效。
上一个:如何在PosgreSQL中匹配两个记录值之间的子字符串?
下一个:熊猫合并 101
评论