SQL Select/Join语句 - 何时没有加入?

Jim*_*ery 2 mysql sql select

所以我一直在使用这个select声明:

select runners.name, runners.age, sum(races.laptime) as totallaptime
from runners join races on runners.runnerid = races.runnerid
where runners.region = "region001"
group by runners.runnerid
Run Code Online (Sandbox Code Playgroud)

这列出了来自特定区域的所有跑步者,并总计了他们所有的单圈时间.

不幸的是,这错过了该地区所有没有单圈时间的选手(可能是因为他们在races数据库中没有条目).

如何调整此select语句以使其包含特定区域中的所有运行程序0,totallaptime如果races数据库中没有任何条目,则列出for ?

(对不起,对于模糊的问题标题,我想不出任何总结这个问题的方法)

TIA

lc.*_*lc. 5

使用LEFT JOIN:

select runners.name, runners.age, coalesce(sum(races.laptime),0) as totallaptime
from runners 
left join races on runners.runnerid = races.runnerid
where runners.region = "region001"
group by runners.runnerid
Run Code Online (Sandbox Code Playgroud)

A LEFT JOIN选择左表的所有行,如果它们存在则返回右表的结果,如果不存在,则返回值为NULL的单行.

注意:我COALESCE在声明中添加了一个因为总结一个NULL将导致的结果NULL; 这会将这些值更改为0.