我的一般形式使用CASE语句不明白为什么括号必须在case语句中使用
CASE
WHEN A is NULL or B is NULL
THEN
然而,一个同事告诉我,这是不正确的,我应该使用括号,如
CASE
WHEN (A is NULL or B is NULL)
THEN
我不太确定为什么第一种方法不正确?这只是一个表现问题吗?
我的一般形式使用CASE语句不明白为什么括号必须在case语句中使用
CASE
WHEN A is NULL or B is NULL
THEN
然而,一个同事告诉我,这是不正确的,我应该使用括号,如
CASE
WHEN (A is NULL or B is NULL)
THEN
我不太确定为什么第一种方法不正确?这只是一个表现问题吗?
第一种方法不是不正确,用于组合逻辑和顺序优先。例如,运行这个:
create table #temp (a int, b int)
insert into #temp (a, b) values
(1,1),
(2,null),
(null,3)
select
case when a is null or b is null then 'one is null'
else 'neither is null'
end as stmt
from #temp
它们在这种情况下完全相同。潘打算...
你的同事可能指的是OR
与AND
的处理。 SQL Server自然赋予AND
优先于OR
,因此需要括号来表示所需的优先级。
例如:
SELECT * FROM MyTable WHERE Col = A AND Col2 = B OR Col3 = C
是这样执行的,不带括号:
SELECT * FROM MyTable WHERE (Col = A AND Col2 = B) OR Col3 = C
所以,如果你真的想Col = A
两个,那么Col2 = B OR Col3 = C
需要括号:
SELECT * FROM MyTable WHERE Col = A AND (Col2 = B OR Col3 = C)
它只是更具可读性,结果是一样的。 – potashin
让你的同事向你解释为什么他们认为这是不正确的。 – Nicarus
也许同事说OR和AND。 – NEER