1.子串交集:开发过程中,会遇到这样的情况:判断两个以","号分或者"-"分割的字符串是否有交集,比如 '1,3' 和 '3,4,5' 是否存在交集,那么就可以使用MySQL正则匹配的方式进行判断
select * from user u where CONCAT(',',u.dep_id,',') REGEXP CONCAT(',(',REPLACE('1,2',',','|'),'),')
2.另一种情况是:两个字符串中一个是以","分割的,另一个则是不分割的字符串,比如 '1' 和 '1,2,3' 是否存在交集,可以使用mysql FIND_IN_SET()函数进行判断
select * from user u where FIND_IN_SET(u.id, '1,2,3')
3.还有一种情况是:判断一个字符串在不在集合中,则可以使用mysql IN()函数进行判断
select * from user u where u.id IN('1','2','3')
总结:具体情况具体分析,find_in_set() 和 in() 的区别是in()会走索引,如果满足条件的情况下尽量使用in()