Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:我可以否定where子句中的条件吗?_Sql_Conditional Statements_Where Clause - Fatal编程技术网

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

SQL:我可以否定where子句中的条件吗?,sql,conditional-statements,where-clause,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 选择* 从表A 哪里 --如果@checkbool为true,则运行此 A.Id=123 --如果@chec

我想检查布尔值是否为真,然后在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
选择*
从表A
哪里
--如果@checkbool为true,则运行此
A.Id=123
--如果@checkbool为false,则运行此
A.Id 123
有没有办法否定一个条件?像C++一样,你可以做!(条件)

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


谢谢大家!

SQL的等价物是
而不是
。但是,在您的情况下,您需要其他东西:您需要构建一个条件,根据
@checkbool
的值在两个选择之间做出决定,如下所示:

SELECT *
FROM TableA A
WHERE (    (@checkbool) AND (A.Id =  123))
   OR ((NOT @checkbool) AND (A.Id <> 123))
选择*
从表A
式中((@checkbool)和(A.Id=123))
或((非@checkbool)和(A.Id 123))

您可以在子句中使用,甚至在!=操作员,例如:

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


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

如果checkbool不是cloumn,则将a.checkbool替换为checkbool的值

下面是正确的SQL

WHERE ((checkbool) AND (A.Id =  123))OR ((NOT checkbool) AND (A.Id <> 123))
其中((checkbool)和(A.Id=123))或((非checkbool)和(A.Id 123))
选择*
从表A
哪里
(@checkbool=1和A.Id=123)或
(@checkbool=0和A.Id 123)
这里有一个解决方案:

IF @Checkbool = 1
     SELECT * FROM Table A WHERE A.Id = 123
ELSE
     SELECT * FROM Table A WHERE A.Id <> 123
如果@Checkbool=1
从表A中选择*,其中A.Id=123
其他的
从表A中选择*其中A.Id 123
下面是另一个仅使用WHERE子句的示例:

SELECT * 
FROM Table A 
WHERE
     (@Checkbool = 1 AND A.Id = 123)
     OR
     (@Checkbool = 0 AND A.Id <> 123)
选择*
从表A
哪里
(@Checkbool=1,A.Id=123)
或
(@Checkbool=0和A.Id 123)
您在where子句中输入的所有内容都需要采用表达式的形式。因此,这种情况下的解决方案是以表达式的形式编写条件


希望这有帮助。:)

如果sql中的条件被称为CASE WHEN…您的第二个示例基本上与公认的答案相同,但我认为它更容易阅读
select *
from TableA A
where
    (@checkbool = 1 and A.Id = 123) or
    (@checkbool = 0 and A.Id <> 123)
IF @Checkbool = 1
     SELECT * FROM Table A WHERE A.Id = 123
ELSE
     SELECT * FROM Table A WHERE A.Id <> 123
SELECT * 
FROM Table A 
WHERE
     (@Checkbool = 1 AND A.Id = 123)
     OR
     (@Checkbool = 0 AND A.Id <> 123)