即使WHERE语句不匹配,也显示表中的所有行

时间:2016-01-18 15:08:54

标签: mysql

我有一个表格延迟,用户可以记录他们在项目上花费的时间。声明有开始和结束时间。

我想要一个特定的项目(id = 1),即每个用户在项目上花费的总时间,即使用户没有在项目上花费任何时间< /强>

表格(简化):

users
-----
- id
- name
- ...

projects
--------
- id
- name

declarations
------------
- id
- user_id
- project_id
- begin
- end

我们假设有2个用户。用户ID = 1花了一些时间在项目上,用户ID = 2没有做任何事情。

select   users.*, sum(timestampdiff(second, declarations.start, declarations.end)) as seconds
from     users
join     declarations on declarations.user_id = users.id
where    declarations.project_id = 1
group by users.id

通过上述查询,仅显示用户1。如何以这种方式修改查询以包含所有其他用户,0的值为seconds

1 个答案:

答案 0 :(得分:0)

考虑使用LEFT OUTER JOIN并将WHERE条件移至JOIN ON条件,如

select users.*, 
sum(timestampdiff(second, declarations.start, declarations.end)) as seconds
from users 
left join declarations on declarations.user_id = users.id
and declarations.project_id = 1
group by users.id