我的一般形式使用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