0

我正在尝试从用户表中进行选择。对于每个用户,我想tblregtime对给定日期参数的当前用户的所有帖子的 Timediff 求和。

问题是即使当前用户在给定日期没有进行注册,我也需要获取信息。如果没有注册,我需要当前用户拥有的输出TotalDiff=0。我当前的 SQL 不能以这种方式工作。它只会给出fname,如果有lname帖子TotalDifftblregtime


sql:

 select  u.fname,u.lname, sum(cast(TIME_TO_SEC(TIMEDIFF(r.edate,r.sdate)) AS UNSIGNED)-r.break_time) as TotalDiff

from tbluser u 

RIGHT OUTER JOIN tblregtime r on r.userid=u.id where r.projectid=21
and  year(r.sdate)=2013 and month(r.sdate)=10 and day(r.sdate)=7
4

1 回答 1

1

如果您试图将所有内容保存在 中tbluser,那么您需要 aleft join而不是 a right join。但是,您还需要将where条件移动到on子句中。否则,当没有匹配时,比较将失败(因为r.值将是NULL):

select u.fname,u.lname,
       sum(cast(TIME_TO_SEC(TIMEDIFF(r.edate,r.sdate)) AS UNSIGNED)-r.break_time) as TotalDiff
from tbluser u LEFT JOIN
     tblregtime r
     on r.userid = u.id and
        r.projectid = 21 and
        year(r.sdate) = 2013 and month(r.sdate) = 10 and day(r.sdate) = 7;

我还建议您将最终日期比较更改为:

r.sdate = '2013-10-07'

这种形式将允许在r.sdate. 正如您所写的,SQL 引擎(至少是我熟悉的 SQL 引擎)不够聪明,无法使用索引。

于 2013-10-29T18:31:21.273 回答