解决mybatis case when 报错的问题
在mybatis中使用casewhen进行条件筛选判断时遇到
Failedtoprocess,pleaseexcludethetableNameorstatementId.
这样的报错信息,报错的信息是语法错误
但是我在mysql的命令行中运行sql语句是没问题的
//我的casewhen语句 WHEREdept.type=1 AND ( CASEagent.dept_type WHEN"agent"THENdept.id=30 END ) //当agent的dept_type为"agent"时,将添加dept.id=30的判断
这段sql语句在命令行内运行没问题但是放到mybatis上执行就会报错
//修改后 WHEREdept.type=1 ANDdept.id= ( CASEagent.dept_type WHEN"agent"THEN30 END )
后来将dept.id放到外面就解决了这个问题
20190718-补充记录:遇到另一个问题,如果dept这个表是联查来的有可能会没有数据,在dept无数据的时候我们就无法给dept.id赋上啥参数了,并且不可以影响原表数据的查询,我改成了下面这样:
//修改后 WHEREdept.type=1 AND(dept.id= ( CASEagent.dept_type WHEN"agent"THEN30 ELSE0 END )ordept.idisnull)
添加dept.id为空的判断即可
(在mysql语句里可以有很多方法解决,但是在mybatis上就会报错-_-||)
2019-7-30-补充说明:
如果是空字符串不可以使用""要改成单引号''
CASEWHEN***THEN*** ELSE""=>这样也会报错,需要改成=>ELSE''
补充:Mybatiscasewhentest注意事项
p_idareaId, c_idareaId, r_idareaId,
test中用==不能用=,否则报错。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。