2016-07-14 4 views
0

ich in der allgemeinen Formverstehen nicht, warum Klammer müssen in einer Case-Anweisung verwendet werden

CASE 
WHEN A is NULL or B is NULL 
THEN 

jedoch eine CASE-Anweisung verwenden, ein Kollege hat mir gesagt, das ist falsch, und dass ich Klammer verwendet werden soll, wie

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

Ich bin mir nicht ganz sicher, warum der erste Ansatz falsch ist? Ist es nur eine Frage der Leistung?

+5

Es ist nur besser lesbar, das Ergebnis ist das gleiche. – potashin

+2

Lassen Sie sich von Ihrem Kollegen erklären, warum sie das für falsch halten. – Nicarus

+0

Vielleicht Mitarbeiter für OR und AND gesagt. – NEER

Antwort

0

Der erste Ansatz ist nicht falsche, die verwendet werden, um Logik und Reihenfolge Vorrang zu gruppieren. Zum Beispiel:

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

Sie sind genau das gleiche in diesem Fall. Wortspiel beabsichtigt ...

Worauf sich Ihr Kollege wahrscheinlich bezieht, ist die Behandlung von OR mit AND. SQL Server gibt natürlich AND Vorrang vor OR, also Klammern sind erforderlich, um die Priorität anzugeben, die Sie möchten.

Zum Beispiel:

SELECT * FROM MyTable WHERE Col = A AND Col2 = B OR Col3 = C 

ist wie diese ohne Klammern ausgeführt:

SELECT * FROM MyTable WHERE (Col = A AND Col2 = B) OR Col3 = C 

Also, wenn Sie tatsächlich Col = A für beide wollen, dann Col2 = B OR Col3 = C Sie Klammern müssen:

SELECT * FROM MyTable WHERE Col = A AND (Col2 = B OR Col3 = C)