有没有办法在sql中执行此内部联接?

时间:2019-07-31 15:48:55

标签: sql

我有一个带有两个表的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'

我不会得到大卫。我怎么也可以得到他?

1 个答案:

答案 0 :(得分:3)

您需要使用left joincoalesce()来为'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