一个比较复杂的SQL匹配字符串的问题

技术背景:Java ,MySql,ORM框架是MyBatis-Plus

问题场景:

`老师选修课,选修课专门有一个字段condition(varchar(256)), 
里面用逗号拼接可报名的必修课,然后用户有一个cond字段(varchar(256)),
现在需要用QueryWrapper来写一个SQL`

我的疑惑:

比如有一个大学钢琴选修课,它的condition是语文,音乐,英语。
说明学生只要必修过语文,音乐和英语任意一个,都可以选修大学钢琴课。
用SQL中来匹配单个字符是有方法的,比如find_in_set,locate
select * from college_course where find_in_set('音乐', condition);
select * from college_course where locate('音乐', condition);

但我的cond是多个的,比如 cond=语文,音乐
如何让condition 中 可以匹配到cond以,分隔的 语文和音乐

另外如何应用到Mybatis-Plus中,写道QueryWrapper中去

希望别告诉我用like,就是因为like太差才想其他办法的

两个问题:

1-如何从SQL上实现 condition匹配以,为分隔字符串中的任意一个,只要匹配到任意一个就行
2-如何应用到Mybatis-Plus中去
阅读 1.7k
1 个回答

多个也很简单的啊

find_in_set('语文', condition) AND find_in_set('音乐', condition) 

不就好了吗?

其实你做个全文索引的话就可以:

MATCH(condition) AGAINST('语文') AND MATCH(condition) AGAINST('音乐')

就挺快的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题