解決mybatis case when 報(bào)錯(cuò)的問題
Failed to process, please exclude the tableName or statementId.
這樣的報(bào)錯(cuò)信息,報(bào)錯(cuò)的信息是語法錯(cuò)誤
但是我在mysql的命令行中運(yùn)行sql語句是沒問題的
//我的case when語句WHERE dept.type = 1AND (CASE agent.dept_typeWHEN 'agent' THEN dept.id=30END)//當(dāng)agent的dept_type為'agent'時(shí),將添加dept.id = 30的判斷
這段sql語句在命令行內(nèi)運(yùn)行沒問題但是放到mybatis上執(zhí)行就會(huì)報(bào)錯(cuò)
//修改后WHERE dept.type = 1AND dept.id=(CASE agent.dept_typeWHEN 'agent' THEN 30END)后來將dept.id放到外面就解決了這個(gè)問題
20190718-補(bǔ)充記錄 :遇到另一個(gè)問題,如果dept這個(gè)表是聯(lián)查來的有可能會(huì)沒有數(shù)據(jù),在dept無數(shù)據(jù)的時(shí)候我們就無法給dept.id賦上啥參數(shù)了,并且不可以影響原表數(shù)據(jù)的查詢,我改成了下面這樣:
//修改后WHERE dept.type = 1AND (dept.id=(CASE agent.dept_typeWHEN 'agent' THEN 30ELSE 0END) or dept.id is null)
添加dept.id為空的判斷即可
(在mysql語句里可以有很多方法解決,但是在mybatis上就會(huì)報(bào)錯(cuò) -_-||)
2019-7-30-補(bǔ)充說明:
如果是空字符串不可以使用''要改成單引號(hào)’’
CASE WHEN *** THEN ***ELSE '' =>這樣也會(huì)報(bào)錯(cuò),需要改成=> ELSE’’
補(bǔ)充:Mybatis case when test 注意事項(xiàng)
<choose> <when test='groupBy!=null and groupBy==1'>p_id areaId, </when> <when test='groupBy!=null and groupBy==2'>c_id areaId, </when> <when test='groupBy!=null and groupBy==3'>r_id areaId, </when> </choose>
test 中 用 == 不能用 = ,否則報(bào)錯(cuò)。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章:
1. 學(xué)好Oracle的六條總結(jié)2. Oracle根據(jù)逗號(hào)拆分字段內(nèi)容轉(zhuǎn)成多行的函數(shù)說明3. 巧用SQL語言在ACCESS數(shù)據(jù)庫中批量替換內(nèi)容4. mysql like語句問題5. Mysql入門系列:在MYSQL結(jié)果集上執(zhí)行計(jì)算6. 傳甲骨文將增加對MySQL投資與微軟競爭7. MySQL主從復(fù)制斷開的常用修復(fù)方法8. MySql遠(yuǎn)程連接的實(shí)現(xiàn)方法9. 快速刪除ORACLE重復(fù)記錄10. mysql啟動(dòng)時(shí)報(bào)錯(cuò) ERROR! Manager of pid-file quit without

網(wǎng)公網(wǎng)安備