解決mybatis case when 報錯的問題
Failed to process, please exclude the tableName or statementId.
這樣的報錯信息,報錯的信息是語法錯誤
但是我在mysql的命令行中運行sql語句是沒問題的
//我的case when語句WHERE dept.type = 1AND (CASE agent.dept_typeWHEN 'agent' THEN dept.id=30END)//當(dāng)agent的dept_type為'agent'時,將添加dept.id = 30的判斷
這段sql語句在命令行內(nèi)運行沒問題但是放到mybatis上執(zhí)行就會報錯
//修改后WHERE dept.type = 1AND dept.id=(CASE agent.dept_typeWHEN 'agent' THEN 30END)后來將dept.id放到外面就解決了這個問題
20190718-補充記錄 :遇到另一個問題,如果dept這個表是聯(lián)查來的有可能會沒有數(shù)據(jù),在dept無數(shù)據(jù)的時候我們就無法給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上就會報錯 -_-||)
2019-7-30-補充說明:
如果是空字符串不可以使用''要改成單引號’’
CASE WHEN *** THEN ***ELSE '' =>這樣也會報錯,需要改成=> ELSE’’
補充:Mybatis case when test 注意事項
<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 中 用 == 不能用 = ,否則報錯。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章:
1. 50種方法巧妙優(yōu)化你的SQL Server數(shù)據(jù)庫2. mysql like語句問題3. Mysql入門系列:MYSQL創(chuàng)建、刪除和選擇數(shù)據(jù)庫4. 恢復(fù)誤刪數(shù)據(jù)(SQL Server 2000)--Log Explorer5. 解決mybatis一對多關(guān)聯(lián)查詢多條數(shù)據(jù)只顯示一條的問題6. SQL Server補丁版本的檢查和安裝過程中常見問題7. 用SQL Server為Web瀏覽器提供圖像(三)(轉(zhuǎn))8. 用SQL Server為Web瀏覽器提供圖像(四)(轉(zhuǎn))9. mybatis 實現(xiàn)多條update同時執(zhí)行10. MySQL公司CEO采訪 MySQL如何從開源中獲利
