SQL尝试外连接表但不工作

时间:2014-09-05 03:00:57

标签: sql join

所以,我是一个Uni任务,讲师本周选择生病,无法回答问题。

我们已经获得了一个由4个桌子组成的棒球数据库。表结构如下:

  

TABLENAME :( column1,column2 ......等)PK =主键,FK =外键

     

球员:(数字PK,名字,dob,球队FK,位置)

     

游戏:(num PK,gamedate,hometeam FK,offteam FK,本垒打,   客场比分)

     

GAMESTAT :( gamenum PK,playernum FK,homeruns,strikeout)

     

团队:(代码PK,名称,城镇,地面)

这个特别问题的目的是获得体育场的名称(球队桌上的地面),在那个地面上得分的本垒打的总和,三振出局的总和,然后是这些的总和指定日期范围内的两个值。

我的查询和问题如下:

SELECT 
   t.ground AS GROUNDPLAYED, 
   SUM(gs.homeruns) as TOTALHOMERUNS, 
   SUM(gs.strikeouts) AS TOTALSTRIKEOUTS, 
   SUM(gs.homeruns + gs.strikeouts) AS COMBINEDTOTAL
  FROM team t 
  LEFT OUTER JOIN game g ON g.hometeam = t.code 
  LEFT OUTER JOIN gamestat gs ON g.num = gs.gamenum
 WHERE g.gamedate BETWEEN '7-AUG-2014' AND '13-AUG-2014'
 GROUP BY t.ground;

我的问题在于我为所玩的游戏获得了正确的值,但无论使用LEFT OUTER JOIN,我都没有得到所有体育场的列表。我确信这与我必须从GAME牌桌加入家庭队这一事实有关,而且它只能选择基于此的主场馆。

非常感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

将WHERE子句移动到ON子句,以便加入 gamestat

通过在WHERE子句中强加过滤条件,在连接完成后发生,删除没有活动的体育场。一旦将该谓词移动到相应的ON子句,它将在连接之前而不是之后过滤gamestat。

您遇到了这个重要的SQL怪癖,在您的教育早期,谓词的定位会影响结果集。