我正在使用一般形式的CASE语句
CASE
WHEN A is NULL or B is NULL
THEN
然而,一位同事告诉我这是不正确的,我应该使用括号,如
CASE
WHEN (A is NULL or B is NULL)
THEN
我不太清楚为什么第一种方法不正确?这只是一个表现问题吗?
答案 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)