我改变我的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。倒数第二个句子说,只得到结束日期在开始日期之后的坡道。第二条款规定,只能获得结束日期落在时间范围之间的坡道。我认为他们没有冲突。 –