根据 SQL 查询中最接近的文本匹配加入表格?

Join tables based on closest text match in SQL queries?

我正在使用 Microsoft Access。我对 SQL 还是很陌生(抱歉,如果我目前的方法看起来太简单了),我一直在尝试连接两个具有不同列名的 table,其中一个 table 具有完整的打印机型号名称,而另一个 table 仅具有打印机型号名称的一部分。

这是一些样本数据

Table答:
型号
MS811DN 激光打印机
MS811DTN 激光打印机
MS812 激光打印机

TableB: 型号
MS811DTN
MS811DN
MS81(其中MS81之后的任何东西都可以代表除MS811DTN或MS811DN之外的任何东西)

我试过在 FROM 语句中使用以下内容: 从 Table一个 左连接 Table B 在 TableA.Model 喜欢 TableB.Model&'*'

但是 return 重复的结果,因为它提供了模型 "like"

的所有值

我想要做的是 return 提供最接近匹配的结果,这样 TableATableB
MS811DN 激光打印机链接到 MS811DN
MS811DTN 激光打印机链接到 MS811DTN
MS812 激光打印机链接到 MS81

有没有办法只得到 return 个最接近匹配的结果?

原来的select就可以了。正如你所说

select ... 
FROM TableA 
    LEFT JOIN Table B ON TableA.Model LIKE TableB.Model&'*'

然后我们可以引入相似度值计算字段

LEN(TableB.Model) - LEN(TableA.Model)

如果它是 0,我们找到完全匹配。

然后你需要添加

GROUP BY TableA.Model

并为每个模型找到一个 MIN(相似度)。

然后只留下相似度最小的记录。

select *
FROM TableA INNER JOIN 
   (select TableA.Model, MIN(LEN(TableB.Model) - LEN(TableA.Model)) as minSim
    FROM TableA 
        LEFT JOIN Table B ON TableA.Model LIKE TableB.Model&'*'
    GROUP BY TableA.Model) sub ON TableA.Model=sub.Model
    LEFT JOIN TableB on TableA.Model LIKE TableB.Model&'*' 
                    and sub.minSim=LEN(TableB.Model) - LEN(TableA.Model)

我不熟悉 Access,所以语法可能有误。只是为了展示这个想法