我的CASE语句查询错误了

Hoo*_*lum 4 mysql sql select group-by case

我正在尝试解决http://www.sqlzoo.net/wiki/The_JOIN_operation上的#13

"列出每场比赛的每场比赛所显示的目标.这将使用"CASE WHEN",这在之前的任何练习中都没有解释过."

这是我的查询:

SELECT game.mdate, game.team1, 
SUM(CASE WHEN goal.teamid = game.team1 THEN 1 ELSE 0 END) AS score1,
game.team2,
SUM(CASE WHEN goal.teamid = game.team2 THEN 1 ELSE 0 END) AS score2

FROM game INNER JOIN goal ON matchid = id
GROUP BY game.id
ORDER BY mdate,matchid,team1,team2
Run Code Online (Sandbox Code Playgroud)

我得到的结果是"太少行".我不明白我错了哪一部分.

mjs*_*squ 20

一个INNER JOIN只返回游戏里出现过的目标,即之间的匹配goalgame表.

你需要的是一个LEFT JOIN.您需要第一个表中的所有行,gamegoal根据我对您的问题所做的0-0评论,它们不需要匹配所有行:

SELECT game.mdate, game.team1, 
SUM(CASE WHEN goal.teamid = game.team1 THEN 1 ELSE 0 END) AS score1,
game.team2,
SUM(CASE WHEN goal.teamid = game.team2 THEN 1 ELSE 0 END) AS score2

FROM game LEFT JOIN goal ON matchid = id
GROUP BY game.id,game.mdate, game.team1, game.team2 
ORDER BY mdate,matchid,team1,team2
Run Code Online (Sandbox Code Playgroud)

这将返回6月27日葡萄牙和西班牙之间的0-0结果,您的初步答案错过了.