2016-07-14 82 views
0

我的一般形式使用CASE語句不明白爲什麼括號必須在case語句中使用

CASE 
WHEN A is NULL or B is NULL 
THEN 

然而,一個同事告訴我,這是不正確的,我應該使用括號,如

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

我不太確定爲什麼第一種方法不正確?這只是一個表現問題嗎?

+5

它只是更具可讀性,結果是一樣的。 – potashin

+2

讓你的同事向你解釋爲什麼他們認爲這是不正確的。 – Nicarus

+0

也許同事說OR和AND。 – NEER

回答

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 
0

它們在這種情況下完全相同。潘打算...

你的同事可能指的是ORAND的處理。 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) 
相關問題