0

(动态查询...)

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
                                           )
                     )
)   <---

问题 :

查看标有 的括号<---

我可以删除它们(不影响这里的逻辑)吗?

4

3 回答 3

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))
于 2012-05-03T09:28:49.667 回答
1

@MikaelEriksson 是对的,结果将不一样,因为 AND 运算符的优先级高于 OR 运算符(msdn)。

在您的示例中(A or A') and (B or B'),您将得到A or (A' and B) or B'.

于 2012-05-03T09:32:03.397 回答
0

不,您不能删除它们。如果我们删除这些括号,那么它将影响逻辑。

于 2012-05-03T09:31:38.387 回答