MySQL中in(‘1,2,3‘)只取第一个id为1对应的数据
mysql 使用id in(‘1,2,3’) 的时候,只能查到id=1的数据的解决方法
前提:
t_user表有三条数据,id分别是1、2、3
场景1
查询:select * from t_user where id in(1,2,3)
结果:三条数据
正常
场景2
查询:select * from t_user where id in(‘1,2,3’)
结果:只有id=1的数据
为什么场景2只有1条结果返回?
为什么场景2入参是字符串的’1,2,3’只返回了1条数据,因为:
mysql 中执行 in函数的时候,会将入参字符串‘1,2’通过 CAST(‘1,2,3’ AS SIGNED) 方法优化,最终取第一个参数1,所以执行后的结果就是只有id=1的数据。
解决场景2问题
如何当入参是字符串‘1,2,3’的时候,还能查出三条数据呢
解决:用FIND_IN_SET方法,第一个参数放字段名,第二个参数放字符串的多个id
select * from t_user where FIND_IN_SET(id, ‘1,2,3’)
原因分析:
MySQL中in里面如果是字符串的话,会自动使用类似CAST(‘5,6,7’ AS INT)方法转化成int类型,对于数字开头的字符串来说,转为数字的结果就是截取前面的数字部分(本例中第一个逗号前的数据),对于开头部分不能截取出数字的字符串来说,转换的结果自然就是0了