2016-06-17 10 views
0

SQLのロジックを書き換え:は、以下のいずれかのように、私のストアドプロシージャ内の1つのクエリがありますクエリ

SELECT ..... 
FROM ..... 
WHERE ..... 
AND 
(
    @date_from IS NULL 
    OR (ahd.dealid IS NULL OR @date_from >= ahd.dealdf) 
) 
AND 
(
    @date_to IS NULL 
    OR (ahd.dealid IS NULL OR @date_to <= ahd.dealdt) 
) 

私はこのように書き換えしようとしています:

SELECT ..... 
FROM ..... 
WHERE ..... 
AND 
(
    (@date_from IS NULL AND @date_to IS NULL) 
    OR 
    (ahd.dealid IS NULL) 
    OR 
    (
    (@date_from IS NOT NULL AND @date_from >= ahd.dealdf) 
     AND 
    (ahd.dealid IS NOT NULL AND @date_to <= ahd.dealdt) 
    ) 
) 

することは正しいが、上のベースということですTRUE/FALSEロジック?単純化して

+2

なぜあなたはそれを書き直していますか?オリジナルのクエリは完全な論理的意味を持ち、従いやすいものでした。たとえ2番目のクエリが論理的に同等であっても、それは私の頭にそれを追うように傷つけます... – Siyual

+0

私はそれに新しい条件を追加する必要があり、元のものを保つことは仕事を複雑にします。 – user3174976

+1

これはあなたに知らせるだけのことではありません。 date_fromを実際の値に、date_toをnullにして、元のクエリが機能するようにすることができます。あなたは残念ながらそうではありません。あなたのものは、文字通り、両方ともnullでなければならないか、または両方が値でなければならないか、またはdealidがnullです。 – Dresden

答えて

1

(
    1 OR 2 OR 3 
) 
AND 
(
    4 OR 2 OR 5 
) 

これは、あなたが見ているものですので、

2 OR ((1 OR 3) AND (4 OR 5)) 

オリジナルのロジックが持つ真のだろう

(1 AND 4) OR 2 OR (3 AND 5) 
と同じではありません1および5または3および4を含み、第2の変形例では失われる。

関連する問題