模糊匹配具有相似级联值的 2 个 SQL 列。但是,行没有以理想的方式排列

Fuzzy Match 2 SQL columns with similar concatenated values. However, the rows are not lined up in an ideal manner

提问人:Tristan Lutgen 提问时间:6/2/2022 最后编辑:Tristan Lutgen 更新时间:6/4/2022 访问量:689

问:

首先,我想说我是 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 之间的模糊匹配分数。

sql 匹配 模糊逻辑

评论

0赞 Hogan 6/2/2022
你没有告诉我们足够的答案 - 这两个表还有哪些其他字段(是否有允许您加入它们的 id?)模糊匹配是如何计算的。这里有很多你假设我们理解但你没有解释的地方。
0赞 Kurt 6/2/2022
这并不是真正的 SQL 问题。SQL可以给你一个笛卡尔积,第一列中的所有值都连接到第二列中的所有值,但任何其他编程语言也可以。计算比赛比分涉及每对上的一些算法或函数

答:

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 而异。

正如另一位评论者所指出的,如果有任何其他列可用于将表格连接在一起,那将比笛卡尔更有效。