不明白为什么必须在Case语句中使用括号

时间:2016-07-14 20:30:05

标签: sql tsql

我正在使用一般形式的CASE语句

CASE 
WHEN A is NULL or B is NULL
THEN

然而,一位同事告诉我这是不正确的,我应该使用括号,如

CASE
WHEN (A is NULL or B is NULL)
THEN

我不太清楚为什么第一种方法不正确?这只是一个表现问题吗?

2 个答案:

答案 0 :(得分:0)

第一种方法不是不正确,用于对逻辑和顺序优先级进行分组。例如,运行:

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

答案 1 :(得分:0)

在这种情况下它们完全相同。双关打算...

您的同事可能指的是使用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)