SQL:我可以否定where子句中的条件吗?

时间:2013-08-08 20:07:24

标签: sql conditional-statements where-clause

我想检查布尔值是否为真,然后在WHERE子句中决定使用什么条件。

假设布尔变量是@checkbool:

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

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

有没有办法否定一个条件?就像在C ++中一样,你可以做到!(条件)。

如果没有,解决这个问题的最佳方法是什么?

谢谢!

5 个答案:

答案 0 :(得分:5)

C中等效于!的SQL是NOT。但是,在您的情况下,您还需要其他内容:您需要构建一个条件,根据@checkbool的值决定两个选项,如下所示:

SELECT *
FROM TableA A
WHERE (    (@checkbool) AND (A.Id =  123))
   OR ((NOT @checkbool) AND (A.Id <> 123))

答案 1 :(得分:2)

select *
from TableA A
where
    (@checkbool = 1 and A.Id = 123) or
    (@checkbool = 0 and A.Id <> 123)

答案 2 :(得分:2)

这是一个解决方案:

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子句中放入的所有东西都需要以表达式的形式存在。因此,这种情况下的解决方案是以表达式的形式写出条件。

希望这会有所帮助。 :)

答案 3 :(得分:1)

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

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

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

这是正确的SQL

WHERE ((checkbool) AND (A.Id =  123))OR ((NOT checkbool) AND (A.Id <> 123))

答案 4 :(得分:0)

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

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

A.Id != 123;