2013-09-25 66 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') 
}