MySQL双状态字段查询异常:无法正确筛选超13天记录求助
修正后的SQL语句及问题说明
你的问题出在SQL逻辑运算符的优先级上:AND的优先级高于OR,原语句的实际执行逻辑是:
(日期差超过13天 且 状态为Pending) OR 状态为Escalated
这就导致所有状态为Escalated的记录都会被筛选出来,不管日期是否符合要求。
修正方案1:用括号包裹状态条件
把两个状态的判断用括号括起来,确保日期条件同时作用于两种状态:
SELECT Field1, Field2 FROM IT INNER JOIN Clients ON IT.ClientCode = Clients.ClientCode WHERE ABS(DATEDIFF(CURDATE(), IT.ReviewTracked)) > 13 AND (IT.Status = 'Pending' OR IT.Status = 'Escalated');
修正方案2:用IN简化状态判断
用IN替代OR,逻辑更简洁直观,效果和上面一致:
SELECT Field1, Field2 FROM IT INNER JOIN Clients ON IT.ClientCode = Clients.ClientCode WHERE ABS(DATEDIFF(CURDATE(), IT.ReviewTracked)) > 13 AND IT.Status IN ('Pending', 'Escalated');
这样就能确保只返回状态为Pending或Escalated,且日期差超过13天的记录。
内容的提问来源于stack exchange,提问作者Wessel Steyl
相关产品推荐
相关产品推荐

