7

I want to check if a boolean is true, then decide in the WHERE clause what condition to use.

Say the boolean variable is @checkbool:

SELECT *
FROM TableA A
WHERE
    --if @checkbool is true, run this
    A.Id = 123

    --if @checkbool is false, run this
    A.Id <> 123

Is there a way to negate a condition? Like in C++ you can do if !(condition).

If not, what is the best way to solve this problem?

Thank you!

4

5 回答 5

9

SQL!在 C 中的等价物是NOT. 但是,在您的情况下,您还需要其他东西:您需要建立一个条件,根据 的值在两个选择之间做出决定@checkbool,如下所示:

SELECT *
FROM TableA A
WHERE (    (@checkbool) AND (A.Id =  123))
   OR ((NOT @checkbool) AND (A.Id <> 123))
于 2013-08-08T20:09:02.650 回答
3

这是一种解决方案:

IF @Checkbool = 1
     SELECT * FROM Table A WHERE A.Id = 123
ELSE
     SELECT * FROM Table A WHERE A.Id <> 123

这是另一个只使用 WHERE 子句的例子:

SELECT * 
FROM Table A 
WHERE
     (@Checkbool = 1 AND A.Id = 123)
     OR
     (@Checkbool = 0 AND A.Id <> 123)

您放入 where 子句的所有内容都必须采用表达式的形式。因此,这种情况下的解决方案是将条件写成表达式的形式。

希望这可以帮助。:)

于 2013-08-08T20:42:14.147 回答
2
select *
from TableA A
where
    (@checkbool = 1 and A.Id = 123) or
    (@checkbool = 0 and A.Id <> 123)
于 2013-08-08T20:17:17.207 回答
1

如果 checkbool 是一个 coumn,那么这样的事情就可以了。(不是正确的 SQL 语法)

WHERE (A.ID=123 AND A.checkbool=TRUE) OR (A.ID!=123 AND A.checkbool=TRUE)

如果 checkbool 不是 cloumn,请将 A.checkbool 替换为 checkbool 的值。

这是正确的 SQL

WHERE ((checkbool) AND (A.Id =  123))OR ((NOT checkbool) AND (A.Id <> 123))
于 2013-08-08T20:14:58.960 回答
0

您可以使用 IN 子句甚至 != 运算符,例如:

A.Id NOT IN (123,x,y,z);

或者

A.Id != 123;
于 2013-08-08T20:10:11.830 回答