mysql - 当一个值大于默认值时,如何停止比较?

标签 mysql

您好,我的查询遇到问题。主要问题是它比较 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/

相关文章:

mysql - Wordpress/codeigniter 传输sql数据库密码

mysql - 服务器时区值 'CEST' 无法识别

mysql - RDS InnoDB RAM使用问题

php - Wordpress 页面模板 php 未按预期输出

php - 使用 PHP MYSQLi 如何只获得债务人和债权人使用 action_type DR 和 CR 进行管理

mysql - 如何查询这是MySQL?

MYSQL 慢 ORDER BY

MySQL 查询操作输出语言

sql - 查看存储过程结果后的自定义结果

php - 给出警告 : mysql_fetch_assoc() expects parameter 1 to be resource, bool 值