如何仅在某个变量为真时添加where子句?



我试图选择并添加一个where子句,只有当某个变量为真。例如:

SELECT * 
FROM STUDENTS 
WHERE STUDENT_NAME IN ('John', 'Jane');

我的变量是$P{isJohnOrJane}它可以是0或1;

我试过了

SELECT * 
FROM STUDENTS 
WHERE $P{isJohnOrJane} = 1 
AND STUDENT_NAME IN ('John', 'Jane') 

就行了。但是当${isJohnOrJane} = 0应该选择所有的学生时,它没有选择任何东西。

我将使用正确的SQL声明变量。有两种方法可以做到这一点:在查询中直接使用变量;或者使用它来确定要执行的查询。

在SQL查询中直接使用变量的第一个示例:

DECLARE @isJohnOrJane bit = 1;
SELECT * 
FROM STUDENTS 
WHERE ( @isJohnOrJane = 1 AND STUDENT_NAME IN ('John', 'Jane') )
OR @isJohnOrJane = 0

或者您可以使用IF逻辑来确定执行:

IF @isJohnOrJane = 1
BEGIN SELECT * FROM STUDENTS WHERE STUDENT_NAME IN ('John', 'Jane') ) END
ELSE
BEGIN SELECT * FROM STUDENTS END

两者都会产生相同的答案,但是IF逻辑可以更好地避免包含变量的奇怪查询,它按预期在表列上使用索引,这可能更容易让其他人理解,并且可以应用于多个结果,而不是像您的示例中那样只有2个。

最新更新