2014-09-05 87 views
1

因此,我有一個Uni任務,講師在本週選擇生病並且無法回答問題。SQL嘗試外部連接表但不工作

我們給了一個由4個表組成的棒球數據庫。表結構如下:

TABLENAME:(列1,列2 ...等)PK =主鍵,FK =外鍵

PLAYER:(NUM PK,姓名,出生日期,球隊FK,位置)

GAME:(NUM PK,gamedate,hometeam FK,awayteam FK,homescore, awayscore)

GAMESTAT:(gamenum PK,playernum FK,本壘打,刪除線)

TEAM:(代碼PK ,姓名,地址WN,地)

這個特別問題的目的是獲得的體育場(隊表地)名,本壘打的總和得分上地面,三振出局,然後總和指定日期範圍內這兩個值的總和。

我的查詢和問題有以下:

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

將您的WHERE子句移動到ON子句中以加入* gamestat *。 – 2014-09-05 03:10:38

回答

0

將您的WHERE子句移動到ON子句以加入gamestat

通過在WHERE子句中強加過濾條件,在之後發生了加入之後,刪除了沒有活動的場館。一旦這個謂詞被移動到合適的ON子句中,它將在連接之前而不是在之後過濾gamestat。

您已經經歷過這種重要的SQL怪癖,在您的教育早期,謂詞的定位會影響結果集。

+0

謝謝Pieter,你是一個拯救生命的人。這讓我瘋狂了一個星期。我聽到一位同學的一些建議與你所說的同樣的影響,但他告訴我把它放在錯誤的地方,並導致錯誤。 – 2014-09-06 23:42:09