在Excel中实现模糊查询用到的方法还是挺多的,比如函数、查询等。
那在数据库中是否也可以实现呢?
答案是可以的,本篇就来聊聊数据库中多表联合查询时如何采用字段模糊匹配。
讲解还是按老风格,用案例说话。
明确需求
假设有两张表,test1表需要匹配tese2表的内容,但是两张表的字段并不完全相同。
需要实现的结果
看似好像并不难,实际也不难,可以用两个方法实现,继续往下看~
方法一 【INSTR 函数】
MySQL中的INSTR(STR,)函数,是指在一个字符串(STR)中搜索指定的字符(),返回发现指定的字符的位置(INDEX)。
STR:被搜索的字符串;
:希望搜索的字符串;
结论:在字符串(STR)里面,指定字符()出现的第一个位置(INDEX),INDEX是从1开始计算,如果没有找到就直接返回0,没有返回负数的情况。
回到案例,来看看案例代码
======================= 代码 ===================
SELECT
a.ID AS aID,
a.username AS aname,
b.newID AS bID,
b.newname AS bname
FROM
test1 a,
test2 b
WHERE
instr( a.username, b.newname )> 0 OR instr( b.newname, a.username )> 0
ORDER BY
a.ID
(代码可以向右滑动)
讲解
两张表连接的条件中使用了instr函数,用来判断字符串是否包含。
判断了两次;
第一次是a表的字符串是否包含b表的字符。
第二次是b表的字符串是否包含a表的字符。
方法二【 函数】
MySQL中的(S1,S2,SN)函数,是指合并多个字符串。
类似Excel中的连接符(&)。
回到案例,来看看案例代码
===================== 代码 =====================
SELECT
a.ID AS aID,
a.username AS aname,
b.newID AS bID,
b.newname AS bname
FROM
test1 a,
test2 b
WHERE
a.username like concat('%',b.newname,'%') or b.newname like concat('%',a.username,'%')
ORDER BY
a.ID
(代码可以向右滑动)
讲解
两张表连接的条件中使用了LIKE模糊查询和函数,用来模糊查看对应的字段。
函数其作用是将字段的左右两端连接上(%),再由LIKE判断是否包含。
同样是判断两次;
第一次是a表的字符串是否包含b表的%%字符。
第二次是b表的字符串是否包含a表的%%字符。
说 到 最 后
两个方法都进行了两次判断,是为了减少匹配不上的情况。
对于模糊匹配的运用还是很广泛的,其运用的方式还需要根据具体业务需求而做出对应的判断。
所以还需要根据自己的需求、业务以及数据情况,具体问题具体分析,结合各种方法开发代码实现自己想要的功能,做到因地制宜。
本期内容就到这啦~