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

Mysql 当一个值大于默认值时,如何停止比较?,mysql,Mysql,嗨,我的查询有问题。主要问题是,它比较2个值,并在看到它大于默认值时对其进行计数。我想要的是,当他看到第一个值大于默认值时,它将停止,而不继续进行下一次比较。有人能帮我吗。任何形式的帮助都将不胜感激 例如,当他看到TS.TI1中的值大于默认值时,它将停止,并且不会继续与其他TS值进行比较 下面是我的MySQL查询: SELECT count(*) AS 'late_cnt', employeeid, J.timein ,TS.`date` FROM timeschedule AS TS LEFT

嗨,我的查询有问题。主要问题是,它比较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您想要什么结果,并且(通常)不指定获得这些结果的方式

因此,在发现
TS.
TI1
'09:30:00'
后,DBMS完全有权停止评估
-序列,或继续评估。出于性能原因,它很可能不会计算以下表达式,但是
count(*)
的结果应该是相同的,因为您是在计算行,而不是满足某些条件的字段


编辑:想想看,如果一个或多个
TI
-字段为
null
,可能会有一些困难,但我会尝试
处理
null
-值(例如使用
合并`)而不是乱搞查询执行计划。

您正在比较TI字段的值,并使用
组合结果。这将选择任何比较是否为真(因为
真或真
),您想要
真或假
假或真
,而不是
真或真
。您需要一个异或操作,或XOR

试试这个:

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' XOR
TS.`TI2` > '09:30:00' XOR
TS.`TI3` > '09:30:00' XOR
TS.`TI4` > '09:30:00' XOR
TS.`TI5` > '09:30:00' ) 

如果任何一个TI字段大于默认值,这将选择一行,但如果多个TI字段大于默认值,则不会选择该行。

我认为您可能需要使用if-ELSE语句进行此操作。我看不出问题所在。您已
将这些比较放在一起。只要条件匹配,你就会得到任何结果。你是说你不希望有多个成功比较的结果吗?为什么
dv
?我认为这个问题没什么不好的。OP展示了他的努力,问题也很清楚(而且,更重要的是,仅仅阅读手册页是找不到答案的)@MikeW:是的,你说得对,我不想看到不止一次成功比较的结果?你能帮我吗。再次感谢你的回复。。我尝试使用XOR,但没有成功。它不计数,只输出0。我设置了显示异或工作的
XOR
。您尚未发布架构或任何示例数据,因此可能存在其他问题。再次感谢,但fiddle链接不起作用thanks@user3492048看来SQLFiddle因为某种原因而停机了。请稍后再试。