Mysql 中 IN条件为字符串时只有第一个数据可用的问题

前两天写了一个sql 使用了  in ,由于数据量很大,所以当时并没有发现有什么问题,后来清理了一下数据库,发现查出的结果并不是特别准确,鱼食就开始找原因,为什么会这样,我最开始的猜测是数据错误,但是检查过后这个猜测被排除了,第二个猜测是哪些条件查的有问题,于是又仔仔细细的看了一遍sql,也并没有发现问题所在。最后实在没办法我把sql拆开一点点执行,发现只能查询出 集合的第一个值  ,例如 我的集合是 140,200,210   只能查出值为140 的,200  210 的都查不出来。找到了问题所在,那么就好解决了。我开始查为什么in 只能查出第一个集合的值,发现我的集合其实并不是真正的集合是一个字符串,只是形式是集合的形式

我的 sql以及表结构:

select count(*) as sl ,lm.id ,lm.name from (select n.lmid,l.name ,l.plmstr,l.id from t_news n left join t_lm l on n.lmid=l.id where n.sts='Y'  ) t left join t_lm lm on lm.id in (t.plmstr) or lm.id=t.id  where lm.sts='Y ' and lm.parentid is null  group by lm.id order by lm.id asc 


最后的解决方案是 使用FIND_IN_SET ,具体的使用方法是FIND_IN_SET(str,strlist),我的sql最后改为:

 select count(*) as sl ,lm.id ,lm.name from (select n.lmid,l.name ,l.plmstr,l.id from t_news n left join t_lm l on n.lmid=l.id where n.sts='Y'  ) t left join t_lm lm on FIND_IN_SET (lm.id ,t.plmstr) or lm.id=t.id  where lm.sts='Y ' and lm.parentid is null  group by lm.id order by lm.id asc 



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值