对于相同的查询,我有不同的结果。我很不明白为什么总数与查询不同。希望有人在这个问题上有一个解释,也许可以说,哪一个应该是正确的总数。谢谢
select sum(tm_hours)
FROM bhds_timecard
WHERE (tm_notes = 'Session'
OR tm_notes = 'Intake'
OR tm_notes = 'OT'
or tm_notes = 'PT'
or tm_notes = 'Speech')
AND (tm_date BETWEEN '2016-04-01' AND '2016-04-30')总数为1792.25。
SELECT SUM(tm_hours)
FROM bhds_timecard
WHERE (tm_date BETWEEN '2016-04-01' AND '2016-04-30')
AND tm_notes = 'Session'
OR tm_notes = 'Intake'
OR tm_notes = 'OT'
OR tm_notes = 'PT'
OR tm_notes = 'Speech'总数为1796.25。
发布于 2016-05-05 01:12:45
如果您理解5+3*2= 11的原因,那么这将有助于了解问题的根源。有些人可能会错误地认为上面的计算应该给你16,因为他们不知道操作的顺序。乘法优先于加法,所以首先进行乘法。
同样地,并且优先级高于OR,所以它是首先完成的。查看算子优先参考手册中的MySQL部分。
这很可能是您试图构建的代码:
SELECT SUM(tm_hours)
FROM bhds_timecard
WHERE tm_date BETWEEN '2016-04-01' AND '2016-04-30'
AND (tm_notes = 'Session'
OR tm_notes = 'Intake'
OR tm_notes = 'OT'
OR tm_notes = 'PT'
OR tm_notes = 'Speech');在这种情况下,由于括号覆盖了操作的标准顺序,所以首先执行括号中的所有操作(这些都是OR语句)。因此,如果只有其中一个条件计算为TRUE,则整个括号部分将计算为TRUE)。接下来,你所有的和得到评估,你有你的答案。
发布于 2016-05-04 16:07:16
第二个查询必须是这样的:
SELECT SUM(tm_hours) FROM bhds_timecard WHERE (tm_date BETWEEN '2016-04-01' AND '2016-04-30')
AND (tm_notes = 'Session' OR tm_notes = 'Intake' OR tm_notes = 'OT' OR tm_notes = 'PT' OR tm_notes = 'Speech')您将丢失第二组条件的(括号。
发布于 2016-05-04 16:09:32
第一个查询是将所有的OR计算为一个条件-
WHERE (tm_notes = 'Session'
OR tm_notes = 'Intake'
OR tm_notes = 'OT'
or tm_notes = 'PT'
or tm_notes = 'Speech')
AND (tm_date BETWEEN '2016-04-01' AND '2016-04-30')如果某一行满足任何这些条件,则它的计算结果为true,然后转到date约束。因此,在第一个查询中实际上只有2个顶级条件。
第二个查询实际上有6个条件-
WHERE (tm_date BETWEEN '2016-04-01' AND '2016-04-30')
AND tm_notes = 'Session'
OR tm_notes = 'Intake'
OR tm_notes = 'OT'
OR tm_notes = 'PT'
OR tm_notes = 'Speech'如果6个OR中的任何一个为true,则计算整个WHERE子句为true。
https://stackoverflow.com/questions/37032639
复制相似问题