首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于SQL查询中最接近的文本匹配的连接表?

基于SQL查询中最接近的文本匹配的连接表?
EN

Stack Overflow用户
提问于 2016-08-10 21:44:03
回答 1查看 1.1K关注 0票数 1

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

以下是一些样本数据

TableA:

模型

MS811DN激光打印机

MS811DTN激光打印机

MS812激光打印机

TableB:模型

MS811DTN

MS811DN

MS81 ( MS81之后的任何内容都可以表示MS811DTN或MS811DN以外的任何内容)

在FROM语句中,我尝试使用以下方法:从TableA开始,在TableA.Model上左加入表B,如TableB.Model&'*‘

但这会返回重复的结果,因为它提供了模型“类似”的所有值。

我想要做的是返回提供最接近匹配的结果,如表A表B

MS811DN激光打印机与MS811DN的链接

MS811DTN激光打印机与MS811DTN的链接

MS812激光打印机与MS81的链接

有没有一种方法只返回最接近匹配的结果?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-10 22:02:35

最初的选择很好。就像你提到的

代码语言:javascript
运行
复制
select ... 
FROM TableA 
    LEFT JOIN Table B ON TableA.Model LIKE TableB.Model&'*'

然后引入相似值计算场。

代码语言:javascript
运行
复制
LEN(TableB.Model) - LEN(TableA.Model)

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

那么您需要添加

代码语言:javascript
运行
复制
GROUP BY TableA.Model

并为每个模型找到一个最小(相似)的值。

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

代码语言:javascript
运行
复制
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,所以语法可能是错误的。只是为了展示这个想法

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38884065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档