public List getmajorscores(String course,String term){//这是调用方法
List list = sMapper.getmajorscores("17会计","2");
return list;
}
在score.java中:
List getmajorscores( String course, String term);
在score.xml中:
select * from scores where s_term = #{1} and s_class like CONCAT('%',#{0},'%') and s_course in(SELECT DISTINCT s_course from scores where s_class like CONCAT('%',#{0},'%') )
mybatis中用like的时候,变量是动态的,但是总是多了一个单引号,好奇怪。
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
9条回答
- zhangpan_soft 2018-08-23 02:43关注
sql本身如楼上所说,
and s_class like CONCAT('%',#{0},'%')
这句话不用要,因为你虚表本身就有,说实话,就sql本身而言,楼主将sql写复杂了,
我们分析一下,SELECT DISTINCT s_course from scores where s_class like CONCAT('%',#{0},'%')
这句话就是查询课程根据班级,而你
所以整个sql可以翻译为查询信息根据s_term
并且 根据 班级s_class like CONCAT('%',#{0},'%')
(这句)并且根据课程,而课程是怎么查出来的?根据班级SELECT DISTINCT s_course from scores where s_class like CONCAT('%',#{0},'%')
,楼主可以试一下,根本没必要要最后一个and
之后的语句,查询出的信息觉对完全一样,也就是2句话说的是一个意思,如果是因为s_cores
可能为null
导致的可以加一句and s_course is not null
,至于为什么觉得让楼主去掉最后一个and
之后的,是因为in
的效率极其低下我们一般sql能不用in就不用in的,in是全表检循环检索,也就是说,你有1000条数据,in有10个条件,呢么就要检索1000*10
次,什么概念?你有百万条数据呢?另外看你贴的错误其是因为17会计
真正传过去的时候是'17会计'
,其暂时我还没看出来,方便的话,将整个xml关于这段贴出来,包含select
标签本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报