我有一个带有两个表的sql数据库。 第一个表被命名为Workers,其列为:id,name,并包含值:
1, Mark
2, David
3, Peter
第二个名称为WorkingHours,其名称为:id,小时,日期,并包含值:
1, 5, '2019-07-20'
1, 4, '2019-07-21'
3, 6, '2019-07-10'
3, 4, '2019-07-20'
我想进行如下查询以显示'2019-07-20'的视图:
id name hours
1 Mark 5
2 David
3 Peter 4
如果我的查询是:
SELECT W.*, H.hours
FROM Workers W
INNER JOIN WorkingHours H ON W.id = H.id
WHERE H.date = '2019-07-20'
我不会得到大卫。我怎么也可以得到他?
答案 0 :(得分:3)
您需要使用left join
和coalesce()
来为'2019-07-20'上没有时间的工人获得0小时
SELECT W.*, coalesce(H.hours, 0) hours
FROM Workers W
LEFT JOIN WorkingHours H ON W.id = H.id AND H.date = '2019-07-20'
如果您不希望0,请使用H.hours
代替coalesce(H.hours, 0)
,这将返回null
。