不嚴(yán)謹(jǐn)?shù)膶懛ǎ赡軙?huì)報(bào)錯(cuò):in (),這種情況不符合SQL的語(yǔ)法,導(dǎo)致程序報(bào)錯(cuò)。
如果簡(jiǎn)單只做非空判斷,這樣也有可能會(huì)有問(wèn)題:本來(lái)in一個(gè)空列表,應(yīng)該是沒(méi)有數(shù)據(jù)才對(duì),卻變成了獲取全部數(shù)據(jù)!
所以一個(gè)比較周全的方法是:
1 2 3 4 5 6 7 8 9 10 11 12 13 | < select id= "findLastPoolTaskIdsForMo" resultMap= "poolTaskResult" > SELECT MIN (p.pool_task_id) AS pool_task_id FROM pool_task p WHERE r_type != 2 <if test= "moCodeList != null and moCodeList.size>0" > AND p.mo_code IN <foreach collection= "moCodeList" item= "item" index = "index" open = "(" close = ")" separator= "," > #{item} </foreach> </if> <if test= "moCodeList==null or moCodeList.size==0" > and 1=0</if> GROUP BY p.mo_code </ select > |
如上,加2個(gè)if判斷,如果為空則永遠(yuǎn)讓語(yǔ)句查詢不到數(shù)據(jù)