2014-02-10 61 views
1

有人可以解釋爲什麼左連接需要得到所有結果? 如果我用一個簡單連接它會忽略在沒有目標已經拿下了比賽(0-0),我不明白爲什麼(因爲它是一個求和函數)左加入從sqlzoo#13的解釋

SELECT mdate,team1, 
SUM(CASE WHEN teamid=team1 THEN 1 ELSE 0 END) score1 , team2, 
SUM(CASE WHEN teamid=team2 THEN 1 ELSE 0 END) score2 
FROM game LEFT JOIN goal ON (id = matchid) 
GROUP BY mdate, matchid, team1, team2 

感謝幫助

+0

很難確定你有沒有完全限定你的列名(這意味着很難知道每列是從哪個表中獲得的)。但是,看起來如果沒有進球,沒有記錄會在目標表中。內部聯接(您的「簡單聯接」)將僅顯示兩個表中存在的記錄。所以只有那些進球得分的比賽。左連接將顯示左表(遊戲)中存在的所有記錄,而不管它們是否在右側(目標)中不是匹配記錄。 – Zec

+0

如果沒有看到您的數據,我們只能假設有沒有目標的ganes。你需要一個外部連接來顯示任何沒有至少一個目標記錄的遊戲。 –

回答

1

如果使用左連接,則每個GAME記錄都包含在結果集中,而不管是否存在GOAL記錄。

如果您使用內部聯接,則只包含可找到目標記錄的GAME(且只包含屬於現有GAME的目標)。如果一個遊戲沒有目標,它將不被包括在內。

(你已經建立起來後,這個記錄集,你那麼做GROUP BY和產生和值,但過程是不相關的連接結果。)

+0

表格是遊戲(id,mdate,體育場,team1,team2)目標(matchid,teamid,球員,球門時間)。好的,但問題是,如果我違反了這種情況,那是否意味着我給了一個值,即使它的0沒有? – user3292068

+0

但它不是零,它是NULL,因爲該記錄不存在。 – Hellion