簡體   English   中英

重寫SQL查詢中的邏輯

[英]Rewriting a logic in SQL Query

我的存儲過程中有一個查詢,如下所示:

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邏輯是否正確?

簡化一下:

(
  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,而在第二個變體中會丟失。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM