2013-09-25 108 views
0

我有一個select語句,其中WHERE子句的IN運算符。只要某些值傳遞給問號(從Java程序傳遞),查詢就能正常工作。但是當沒有值傳遞時,我得到一個語法錯誤。'IN'運算符中的動態值

select 
    this_.categoryAddressMapId as category1_1_0_, 
    this_.categoryId as categoryId1_0_, 
    this_.addressId as addressId1_0_ 
from 
    icapcheckmyphotos.category_address_map this_ <br> 
where 
    this_.addressId in (
      ? 
    ) 

當沒有參數傳遞時,我需要空集。請建議如何修改where子句。在此先感謝

+0

要求括號中至少有一個值,例如()中的foo不是合法的sql。它必須至少是'(bar)'中的哪個地方。如果不寫動態sql,或者至少輸入一個你知道必須存在的值,你就沒有辦法繞過這個限制。 –

+1

如果沒有什麼可以從中獲得,Java程序是否應該調用這個查詢?似乎沒有必要。 –

回答

2

修改您的Java程序。如果沒有addressIds,您的選擇是不運行查詢,或者確保它傳遞至少一個值。如果addressId是一個整數字段,則傳遞-1或類似的東西。就我個人而言,我喜歡第一種選擇,但它取決於您的要求。

0

怎麼做sometiong像

where (? is null) OR this_.addressId in (? ) 

你可能需要一些特殊的處理增加的第一部分,或者您也列接受NULLS

0

//僞代碼 ...

WHERE 1 
if(!null) { 
    AND this_.addressId in ('stuff') 
}