Java SQL是否在中取决于布尔参数
我有一个java布尔参数,它应该告诉我是检查(x,y,z)中的值还是不检查(x,y,z)(基于真/假)。如何在SQL查询中插入“NOT”?我应该使用简单的String.replaceAll()还是编写不同的查询?哪个是最优的?一个选项是编写一个包含参数的查询。您可以将条件表示为: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)); 对于性能,我认为
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将不匹配任何记录。。。但我不鼓励这样做。如果您想要优化,请使用不同的查询。