【发布时间】:2016-09-10 05:01:24
【问题描述】:
带有左连接的 mysql SELECT 查询没有产生我期望的结果。 我希望有人能告诉我或指出正确的方向,
我正在尝试构建一个查询,从“用户”表中获取所有用户名,然后 从主表中获取他们在特定日期花费的所有时间的总和。我使用了左连接,但没有得到预期的结果。
SUM(m.time_spent) as sum_total_time
FROM master as m
LEFT OUTER JOIN users as u ON u.user_id = m.user_id
WHERE m.date_created >= '2016-05-09'
AND m.date_created <= '2016-05-13'
GROUP BY name
ORDER BY name
主表
master_id user_id time_spent date_created
1 1 40 2016-05-01
2 2 36 2016-05-02
3 3 56 2016-05-03
4 2 33 2016-05-03
5 1 32 2016-05-05
nth nth nth number nth date
用户表
user_id first_name last_name
1 James Green
2 Robert Cox
3 Andy Roger
etc etc etc
我希望输出结果应该是这样的:
user_id Name sum_total_time
1 James Green 62
2 Robert Cox 69
3 Andy Roger 56
4 Brian Harper 0
5 Angel Lee 0
6 Andrew Martin 55
.....
.....
Nth Name Nth value
【问题讨论】:
-
你使用
WHERE m.date_created >= '2016-05-09'并且你的 date_created 小于这个日期。还有什么是 AND m.date_created ???条件在哪里? -
3 件事:1)左侧的表应该是用户(或者只是将其切换到 RIGHT 连接)和 2)总和需要
coalesce(m.time_spent,0)3)将 where 子句详细信息移动到联接,因为它们需要在联接数据之前应用。 -
你得到了什么结果?
-
@xObert,事实上,合并不是必需的,NULL 确实会影响 SUM。同样,
where子句和on子句中的条件具有相同的效果(此外,在内部它们被视为单个条件列表)。不过,RIGHT JOIN的观点很好。