c++ set用法_Mysql中使用FIND_IN_SET解决IN条件为字符串时只有第一个数据可用的问题...

前言

微信公众号:潇雷
当努力到一定程度,幸运自与你不期而遇。

设计了两张表:

1、按钮业务表:每个按钮记录n个设备
2、设备表:设备的其他信息。

开始查询

1
379cf312dd5888fd6af5749f90b39501.png

发现只查出9条数据。而这个按钮对应了两个设备,理论上是有22条的数据的。

对in里面的子查询拆分单独查询:

1
c244aadedf9550a2328314c6ff8fc4e2.png

发现是有两个设备,可为什么查询出来的值都是第一个设备的值呢?继续把in里面的内容替换成字符串 ("1000070001,1000100001") ,发现结果没变,而换成整形时(1000070001,1000100001),或者分割的字符串时("1000070001","1000100001")就发现了是可以查询出所有的。因此,mysql的in 使用的时候如果遇到是一串字符串的时候,只会查询第一个数据。而如果你想用字符串时,该怎么办呢?这时候就出现了这个字符串函数:find_in_set:

1

对比

find_in_set有三种用法:

【注:a,b,c代表字符串常量,name代表字段名】

1、find_in_set('b','a,b,c')    

这个是find_in_set主要用法,find_in_set都有返回值,
如这个的返回值为2 ,查不到返回值为0或者null(其中有一个参数为null的情况下返回null)

2、find_in_set('b',name)        

查找name字段中包含b的字段但是name值的记录方式必须是'a,b,c'
这个用法跟name like "%'b'%" 类似,不同的是:find_in_set是精确匹配,like是模糊匹配,
比如:name的一个值为'a,ab,c' find_in_set则返回为0,like则能查到

3、find_in_set(name,'a,b,c')

这个用法跟name in ('a','b','c')结果是相同的,
区别是find_in_set是拼接成的一个字符串'a,b,c',
in是多个字符串'a','b','c'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值