理解し、私のような括弧を使用する必要がありますいけない同僚が、これは間違っているとことを私に言った、私は</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
なぜ最初のアプローチが間違っているのかよく分かりません。それは単なるパフォーマンスの問題ですか?
理解し、私のような括弧を使用する必要がありますいけない同僚が、これは間違っているとことを私に言った、私は</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
なぜ最初のアプローチが間違っているのかよく分かりません。それは単なるパフォーマンスの問題ですか?
最初のアプローチはではありません。は、ロジックと順序の優先順位をグループ化するために使用されます。たとえば、次のように実行します。
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
この場合、これらはまったく同じです。 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)
それは、より読みやすく、結果は同じです。 – potashin
あなたの同僚に、それが間違っていると思う理由を説明してもらってください。 – Nicarus
おそらく、同僚がORとANDで言ったでしょう。 – NEER