Java SQL是否在中取决于布尔参数

Java SQL是否在中取决于布尔参数,java,sql,sql-server,Java,Sql,Sql Server,我有一个java布尔参数,它应该告诉我是检查(x,y,z)中的值还是不检查(x,y,z)(基于真/假)。如何在SQL查询中插入“NOT”?我应该使用简单的String.replaceAll()还是编写不同的查询?哪个是最优的?一个选项是编写一个包含参数的查询。您可以将条件表示为: select t.* from t where (@flag = 1 and x in (1, 2, 3)) or (@flag = 0 and x not in (1, 2, 3)); 对于性能,我认为

我有一个java布尔参数,它应该告诉我是检查(x,y,z)中的值还是不检查(x,y,z)(基于真/假)。如何在SQL查询中插入“NOT”?我应该使用简单的String.replaceAll()还是编写不同的查询?哪个是最优的?

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

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。

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

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。

如果使用前者,您可能希望包含
重新编译
选项,因为这两个查询的查询计划可能完全不同。如果这不是一个选项(由于使用的是较旧版本的SQL Server),那么您可能希望使用动态SQL。但是,我同意,在java中处理要运行的查询可能是更好的选择。如果使用前者,您可能希望包括
重新编译
选项,因为这两个查询的查询计划可能会非常不同。如果这不是一个选项(由于使用的是较旧版本的SQL Server),那么您可能希望使用动态SQL。但是,我同意,在java中运行哪个查询可能是更好的选择。如果in列表中有空值,请编写另一个查询。否则,您将以“是”结尾,我如何检查IN()中是否有空?可能忽略WHERE,如果IN()是唯一的条件?
WHERE col IN()
将是无效的SQL和另一个问题。对于“一网打尽”的路由,您可以简单地将
-1
添加到该列表中,这样它就永远不会为空,并且-1将不匹配任何记录。。。但我不鼓励这样做。如果希望优化,请使用不同的查询。in列表中是否有空值?请编写不同的查询。否则,您将以“是”结尾,我如何检查IN()中是否有空?可能忽略WHERE,如果IN()是唯一的条件?
WHERE col IN()
将是无效的SQL和另一个问题。对于“一网打尽”的路由,您可以简单地将
-1
添加到该列表中,这样它就永远不会为空,并且-1将不匹配任何记录。。。但我不鼓励这样做。如果您想要优化,请使用不同的查询。