2012-05-03 112 views
0

(動態查詢...)SQL Server tsql括號邏輯?

select * from myTable where 

( <--- 

@param1 IS NULL 
        OR (
         param1 IN 
              ( 
               SELECT item 
               FROM blabla1 
              ) 
        ) 
) <--- 
and 
( <--- 

@param2 IS NULL 
        OR (
         param2 IN 
              ( 
               SELECT item 
               FROM blabla2 
              ) 
        ) 
) <--- 

問題:

看看標有<---括號。

我可以刪除它們嗎(不影響這裏的邏輯)?

+0

恕我直言,最好有不必要的括號和更多的可讀/邏輯邏輯比在邏輯中犯錯誤。您可能會建議您自己,邏輯操作的順序與MSSQL的實際工作方式不同。 – huhu78

回答

2

不需要,但可以刪除IN聲明中的那些。

select * 
from myTable 
where 
    (@param1 IS NULL OR @param1 IN (SELECT item FROM blabla1)) 
    and 
    (@param2 IS NULL OR @param2 IN (SELECT item FROM blabla2)) 

如果去掉你問你的那些不得不說是這樣的

select * 
from myTable 
where 
    param1 IS NULL 
    OR 
    (param1 IN (SELECT item FROM blabla1)) and param2 IS NULL 
    OR 
    (param2 IN (SELECT item FROM blabla2)) 
0

查詢不,你不能刪除它們。如果我們刪除這些括號,那麼它會影響邏輯。

1

@MikaelEriksson是正確的,結果將不會相同,因爲AND運算符優先於OR運算符(msdn)。

在您的示例中,而不是(A or A') and (B or B'),您將獲得A or (A' and B) or B'