首页 > 解决方案 > SQL不返回另一个表中为null的值

问题描述

我正在尝试使用 SQL 连接函数从多个表中获取信息。

我的问题是我似乎无法得到想要的结果。

     select a.DRINKER, sum(C.PRICE)
     from DRINKERS a
     left join ORDERS b on a.DRINKER = b.DRINKER
     join SERVES c on b.PUB = c.PUB and d.DRINK = c.DRINK
     group by a.DRINKER;

这给出了以下结果

----------------------
|DRINKER|sum(C.PRICE)|
----------------------
|  BOB  |   200.10   |
|  NED  |   172.50   |
|  JOE  |   270.90   |
|  TIM  |    80.10   |
----------------------

但是,我希望这能够像这样给 a.DRINKER 中的所有人:

----------------------
|DRINKER|sum(C.PRICE)|
----------------------
|  BOB  |   200.10   |
|  NED  |   172.50   |
|  JOE  |   270.90   |
|  TIM  |    80.10   |
|  PAT  |    null    |
|  ANN  |    null    |
----------------------

任何指导将不胜感激,如果您还可以解释更改背后的逻辑,将不胜感激,因为我想了解我应该做什么!提前致谢!

标签: sqljoinselectgroup-by

解决方案


即使 DRINKERS 和 ORDERS 之间有左连接,ORDERS 和 SERVES 之间的连接也会过滤掉在第一个左连接中获得的任何空值。

要解决此问题,您可以尝试进一步向左加入表格

 select a.DRINKER, sum(C.PRICE)
   from DRINKERS a
   left join ORDERS b on a.DRINKER = b.DRINKER
   left join SERVES c on b.PUB = c.PUB and d.DRINK = c.DRINK
  group by a.DRINKER;

推荐阅读