Posted on 2017-11-23 13:40
朱杰兵 閱讀(495)
評論(0) 編輯 收藏
不嚴謹的寫法,可能會報錯:in (),這種情況不符合SQL的語法,導致程序報錯。
如果簡單只做非空判斷,這樣也有可能會有問題:本來in一個空列表,應該是沒有數據才對,卻變成了獲取全部數據!
所以一個比較周全的方法是:
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個if判斷,如果為空則永遠讓語句查詢不到數據