MySql中,字段部分匹配实现(多表查询的on字段的部分值匹配其他表的部分值)

发布时间:2024年01月04日

? ? ? ? 有时候我们不需要使用一整个字段进行查询,比如,有一个字段是ip+端口的形式(例如:192.168.2.254:4433),如果我们只需要进行单纯的搜索,那么直接使用模糊查询即可,例如:

很好,太简单辣。

现在,我们来进阶使用,所谓的模糊查询。有一个函数,叫SUBSTRING_INDEX()。使用方法如下:

SUBSTRING_INDEX()函数的三个参数分别是:需要切割的字符串;切割条件;取切割完的若干字符中第n个之前的字符。我们看上面的用例,解释下即:切割'192.168.2.254:4433',遇到':'就触发切割,并且获取第一个切割规则前面的字符串。

其实在这里我们会发现,如果使用'.'作为切割规则,最后面的参数为2,即可获得"192.168",那么我们怎么倒着获取呢,其实很简单,最后的参数输入-1即可。

其实,这时候会发现,有什么用吗,无非就是截取了一下,我们回到最开始的问题。

假设,我们有两个表,这两个表就是通过ip进行左连接,并且这两个表都是ip+端口的形式(192.168.2.254:4433 <==> 192.168.2.254:3306),但是,我们只需要前面的ip,而不需要端口(存端口是其他的业务需求),此时在进行左连接匹配时,你会发现on不能用,因为他不直接相关,而此时模糊匹配也不能用,因为LIKE是使用短的去匹配长的,他俩一样长啊!在这个时候,就是SUBSTRING_INDEX的用武之地了,只要我们分别截取两个字符串,使用' : '分割,然后再获取' : '前面的内容即可。接下来我们实操一遍:

SELECT a.ip,b.url  FROM c_inventory a  LEFT JOIN  t_configure b ON  SUBSTRING_INDEX(a.ip, ':', 1) = SUBSTRING_INDEX(b.url, ':', 1);

完美,是不是很简单,又学会一个小技巧!

文章来源:https://blog.csdn.net/jinkunqingning/article/details/135342772
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。