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 に答える