SQL多表联合查询时如何采用字段模糊匹配
作者:Eureka丶 发布时间:2024-01-19 18:06:40
先说一下背景和要求
背景:由于业务或是其他不描述的原因的问题导致原有存储的数据发生变动,与现有数据有差别,但还是能勉强看明白数据内容。
要求:实现A表的名称字段和B表的名称字段要模糊匹配。
上图:
假如A表长这样:
B表长这样:
然后我要想变成这样:
简单说就是在我关联查询两表时,条件字段的取值看起来不一样,但是意思是一样的,应该要把这种数据关联起来。但是SQL里面“=”两边又必须严格相同,所以现在怎么办呢?
方法一
可以采用类似于LIKE模糊查询的办法。
MySQL:
SELECT a.id,a.`name`,b.newid,b.newname FROM z_good a,z_good_new b
WHERE INSTR(a.`name`,b.newname)>0 OR INSTR(b.newname,a.`name`)>0
或者
SELECT a.id,a.`name`,b.newid,b.newname FROM z_good a,z_good_new b
WHERE a.`name` LIKE CONCAT('%',b.newname,'%') OR b.newname LIKE CONCAT('%',a.`name`,'%')
Oracle:
SELECT a.id,a.`name`,b.newid,b.newname FROM z_good a,z_good_new b
WHERE a.`name` LIKE '%'||b.newname||'%'
SQL Server:
SELECT a.id,a.`name`,b.newid,b.newname FROM z_good a,z_good_new b
WHERE a.`name` LIKE '%'+b.newname+'%' OR b.newname LIKE '%'+a.`name`+'%'
顺便说一下这里用到的字符串拼接功能在三类数据库中的写法:
SQL Server:
SELECT '123'+'456'
Oracle:
SELECT '123'||'456' FROM dual
或
SELECT CONCAT('123','456') FROM dual
MySQL:
SELECT CONCAT('123','456')
Oracle和MySQL中虽然都有CONCAT,但是Oracle中只能拼接2个字符串,所以建议用||的方式,MySQL中的CONCAT则可以拼接多个字符串。
此外,MySQL中的INSTR(STR,SUBSTR)函数,在一个字符串(STR)中搜索指定的字符(SUBSTR),返回发现指定的字符的位置(INDEX)。
STR—被搜索的字符串;
SUBSTR—希望搜索的字符串;
结论:在字符串STR里面,字符串SUBSTR出现的第一个位置(INDEX),INDEX是从1开始计算,如果没有找到就直接返回0,没有返回负数的情况。
到这儿,有同学就会发现,你这应用场景也太单一了吧,要是这种:A表被关联字段值为“城乡规划”,B表被关联字段值为“城市规划”;或者A表被关联字段值为“漂亮”,B表被关联字段值为“美丽”。这样的两个字段值也是一个意思,但是用上面的方法就行不通了。
没办法了嘛?
有的。
方法二
你还可以使用NLP的算法来做上面最后提到的那种情况,关于这点,在我之前发表的文章《Word2Vec可视化展示》中已有详细说明,感兴趣的同学可以研究研究。
另外就是,不管哪种办法,总有漏网之鱼,也就是总有你匹配不到的情况,或是匹配错误的情况。所以还需要根据自己的需求、业务以及数据情况,具体问题具体分析,结合各种方法开发代码实现自己想要的功能,做到因地制宜。
那有同学又问了,就没有那种一招打天下的办法了吗?
有的。
方法三
你可以用你的最强大脑去手动处理~~~~~~~~~~
咳咳,我的意思是:就算要手动处理,我们也要减少手动处理的工作量嘛。要不“会急死人的”,真的“会急死人的”!
来源:https://blog.csdn.net/Jeremiah_/article/details/121039067


猜你喜欢
- 删除字符串中不需要的内容1、strip()方法strip:默认是去掉首尾的空白字符,但是也可以指定其他字符;lstrip:只去掉左边的;rs
- 最近在处理语音检索相关的事。 其中用到语音识别,调用的是讯飞与百度的api,前者使用js是实现,后者用python3实现(因为自己使用pyt
- 思路简单的生成和读取 CSVCSV 文件格式使用 csv 库Python with CSV先有个很朴素的生成和解析的方法。生成:data =
- python map函数map()函数map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依
- 准备工作本文用到的表格内容如下:先来看一下原始情形:import pandas as pddf = pd.read_excel(r'
- 本文实例讲述了Python中操作符重载用法。分享给大家供大家参考,具体如下:类可以重载python的操作符操作符重载使我们的对象与内置的一样
- 有时候我们需要判断两个字符串内容是否相等,判断内容相等,我们用‘==',但是有时候发现print(str1)和print(str2)
- 数学模块import mathceil -- 上取整对一个数向上取整(进一法),取相邻最近的两个整数的最大值。import mathres
- 本文实例讲述了MySQL连接查询。分享给大家供大家参考,具体如下:创建表suppliers:CREATE TABLE suppliers(
- java连接数据库增、删、改、查工具类数据库操作工具类,因为各厂家数据库的分页条件不同,目前支持Mysql、Oracle、Postgresq
- 本文实例讲述了Python3.5变量、数据结构、条件和循环语句、break与continue语句。分享给大家供大家参考,具体如下:1、变量:
- 之前用bash实现过(https://www.jb51.net/article/61943.htm),不过那个不能在windows下使用,所
- 代码如下:--执行顺序 From Where Select select * from (select sal as salary,comm
- 一、字符串离散化示例对于一组电影数据,我们希望统计电影分类情况,应该如何处理数据?(每一个电影都有很多个分类)思路:首先构造一个全为0的数组
- BN原理、作用函数参数讲解BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, tr
- 当前,数据可视化已经成为数据科学领域非常重要的一部分。不同网络系统中产生的数据,都需要经过适当的可视化处理,以便更好的呈现给用户读取和分析。
- 目前可实现:MD5算法、SHA256算法、先MD5后SHA256、先SHA256后MD5、两次MD5、两次SHA256、前8位MD5算法后8
- Pyinstallerpyinstaller是python的一个第三方模块,使用它可以将python程序打包为可执行文件,实现打包后的程序在
- 事物绝非十全十美总有强差人意的一面,之前针对浮动分析了其引起文本重影的怪异问题,而作为浮动布局的最佳搭档定位布局也存在一定的缺陷。围绕着定位
- 基本使用首先要下载 pymysqlpip install pymsql以下是 pymysql 的基本使用import pymysql# 链接