SQL多表联合查询时如何采用字段模糊匹配

作者:Eureka丶 时间:2024-01-19 18:06:40 

先说一下背景和要求

背景:由于业务或是其他不描述的原因的问题导致原有存储的数据发生变动,与现有数据有差别,但还是能勉强看明白数据内容。

要求:实现A表的名称字段和B表的名称字段要模糊匹配。

上图:

假如A表长这样:

SQL多表联合查询时如何采用字段模糊匹配

B表长这样:

SQL多表联合查询时如何采用字段模糊匹配

然后我要想变成这样:

SQL多表联合查询时如何采用字段模糊匹配

简单说就是在我关联查询两表时,条件字段的取值看起来不一样,但是意思是一样的,应该要把这种数据关联起来。但是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`,'%')

SQL多表联合查询时如何采用字段模糊匹配

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

标签:SQL,多表,查询,字段,模糊匹配
0
投稿

猜你喜欢

  • django用户登录和注销的实现方法

    2021-01-17 13:55:40
  • pytorch的batch normalize使用详解

    2023-12-23 04:24:26
  • Python OpenCV图像颜色变换示例

    2023-07-30 06:05:00
  • python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择

    2022-04-22 01:39:50
  • 通过Kettle自定义jar包供javascript使用

    2024-04-30 09:58:10
  • Python tkinter模块中类继承的三种方式分析

    2023-07-19 22:00:48
  • JS正则(RegExp)判断文本框中是否包含特殊符号

    2023-05-12 18:18:55
  • MySQL学习第四天 Windows 64位系统下使用MySQL

    2024-01-24 02:35:46
  • 基于PHP的登录和注册的功能的实现

    2024-04-30 08:48:04
  • python对输出的奇数偶数排序实例代码

    2023-02-17 17:55:16
  • 通过Jython调用Python脚本的实现方法

    2022-07-08 23:21:42
  • python实现在多维数组中挑选符合条件的全部元素

    2022-06-02 03:43:12
  • Python中的高级函数map/reduce使用实例

    2021-11-07 06:57:23
  • Python实现程序判断季节的代码示例

    2022-04-04 13:30:22
  • vue动态绑定class选中当前列表变色的方法示例

    2024-04-10 13:48:51
  • 用Python自动发邮件提醒你周末吃啥

    2022-04-10 11:44:28
  • 一起来了解mysql数据库

    2024-01-24 07:40:00
  • pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作

    2023-11-30 01:20:41
  • pandas 如何将字符串映射为数字

    2021-04-15 02:47:33
  • np.concatenate()函数的具体使用

    2023-06-21 11:15:19
  • asp之家 网络编程 m.aspxhome.com