2016-07-14 4 views
0

理解し、私のような括弧を使用する必要がありますいけない同僚が、これは間違っているとことを私に言った、私は</p> <pre><code>CASE WHEN A is NULL or B is NULL THEN </code></pre> <p>しかし一般的な形でCASEステートメントを使用しています

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

この場合、これらはまったく同じです。 Punが意図した...

あなたの同僚はおそらくORの扱いとANDの扱いです。 SQL Serverは当然ORよりも優先度がANDであるため、必要な優先度を示すためにかっこが必要です。例えば

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) 
関連する問題

 関連する問題