SQL IN或NOT IN取决于布尔参数

时间:2018-09-17 12:48:21

标签: java sql sql-server

我有一个Java布尔参数,该参数应该告诉我是否检查值IN(x,y,z)或NOT IN(x,y,z)(基于true / false)。如何将“ NOT”插入SQL查询?我应该使用简单的String.replaceAll()还是编写其他查询?哪个是最佳?

1 个答案:

答案 0 :(得分:6)

一个选项是编写一个带参数的查询。您可以将条件表示为:

select t.*
from t
where (@flag = 1 and x in (1, 2, 3)) or
      (@flag = 0 and x not in (1, 2, 3));

对于性能,我认为union all更好:

select t.*
from t
where @flag = 1 and x in (1, 2, 3)
union all
select t.*
from t
where @flag = 0 and x not in (1, 2, 3);

当然,在Java中,您可以只使用两个查询:

if flag then sql = . . . 
else sql = . . . ;

然后一步执行sql。