SQL 尝试外部连接表但不工作
Posted
技术标签:
【中文标题】SQL 尝试外部连接表但不工作【英文标题】:SQL Trying to Outer Join Tables but not working 【发布时间】:2014-09-05 03:00:56 【问题描述】:所以,我有一个大学作业,讲师选择这周生病,无法回答问题。
我们得到了一个由 4 个表格组成的棒球数据库供我们使用。表结构如下:
TABLENAME:(column1, column2...etc) PK = 主键,FK = 外键
PLAYER:(人数PK,姓名,dob,队伍FK,位置)
GAME:(num PK, gamedate, hometeam FK, awayteam FK, homecore, 客场得分)
GAMESTAT:(gamenum PK, playernum FK, homeruns, 三振出局)
TEAM:(代码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 表加入主队这一事实有关,它只能基于此选择主体育场。
您能提供的任何帮助将不胜感激。
【问题讨论】:
将您的 WHERE 子句移至 ON 子句以连接到 gamestat。 【参考方案1】:将您的 WHERE 子句移动到 ON 子句以连接到 gamestat。
通过在 WHERE 子句中施加过滤条件,它发生在 执行连接之后,删除没有活动的体育场。一旦这个谓词被移动到适当的 ON 子句,它将在连接之前而不是之后过滤 gamestat。
您有幸在您学习的早期就遇到了 SQL 的这一重要怪癖,即谓词的位置会影响结果集。
【讨论】:
谢谢彼得,你是救生员。这让我发疯了一个星期。我从一位同学那里得到了一些建议,与你所说的效果差不多,但他告诉我把它放在错误的地方,这会导致错误。以上是关于SQL 尝试外部连接表但不工作的主要内容,如果未能解决你的问题,请参考以下文章