我改變我的WHERE條件的順序得到不同的結果,但我不明白爲什麼:應該在這個where子句中考慮順序嗎?
SELECT
...
WHERE (
-- Ramps that start this month
(r.start_dte > ? AND r.start_dte <= ?)
OR
-- Ramps that end this month and have no follow-up.
(r.end_dte >= ? AND r.end_dte <= ? AND r.id = m.latestId)
)
-- Throw out expired schedules or contracts
AND (s.term_dte > r.start_dte or s.term_dte is null)
AND (c.term_dte > r.start_dte or c.term_dte is null)
-- Throw out a ramp if its end date is before its start date
AND (r.end_dte > r.start_dte)
AND s.name not like '%zz%'
我的本意是前兩個條件之一得到滿足(斜坡必須或者本月開始或本月結束&無後續行動),並滿足其他所有條件。我沒有寫過嗎?
我知道事情工作不正常,因爲我得到的結果違反倒數第二個AND
條件。
您的第二個和倒數第二個子句是衝突的。爲什麼說(A或B)然後說(A)?其中A是s.term_dte> r.start_dte。 – Lukos
對不起,我的意思是r.end_dte。倒數第二個句子說,只得到結束日期在開始日期之後的坡道。第二條款規定,只能獲得結束日期落在時間範圍之間的坡道。我認爲他們沒有衝突。 –