您好,我的查询遇到问题。主要问题是它比较 2 个值并在发现它大于默认值时对其进行计数。我想要的是,当他看到第一个值大于默认值时,它将停止并且不再进行下一个比较。谁能帮我这个。任何形式的帮助将不胜感激。
例如,当他看到 TS.TI1
中的值大于默认值时,它将停止并且不会继续与其他 TS 值进行比较。
这是我的 MySQL 查询:
SELECT count(*) AS 'late_cnt', employeeid, J.timein ,TS.`date`
FROM timeschedule AS TS
LEFT JOIN employee AS E ON TS.employeeid = E.id
LEFT JOIN jobgrade AS J ON J.id = E.jobGradeid
WHERE TS.employeeid = '1' AND DATE_FORMAT(TS.`date`, '%m %Y') = CONCAT(LPAD(2,2,'0'),' ','2014')
AND ( TS.`TI1` > '09:30:00' OR
TS.`TI2` > '09:30:00' OR
TS.`TI3` > '09:30:00' OR
TS.`TI4` > '09:30:00' OR
TS.`TI5` > '09:30:00' )
最佳答案
您的问题存在根本性缺陷: SQL 是一种声明性语言,您告诉 DBMS 您想要什么结果,并且(通常)您不指定如何这些结果应获得结果。
因此,鉴于 DBMS 在找到 TS.
TI1> '09:30:00' 后停止评估
或继续评估。出于性能原因,它很可能不会计算以下表达式,但 or
序列,完全取决于 DBMS count(*)
的结果应该是相同的,因为您计算的是行,而不是>满足某些条件的字段。
编辑:想一想,如果一个或多个 TI
字段为 null
,可能会遇到一些困难,但随后我会尝试处理
null-值(例如使用
coalesce`)而不是搞乱查询执行计划。
关于mysql - 当一个值大于默认值时,如何停止比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23053411/