SQL JOIN教程(第13部分)问题:无进球记录未返回
问题分析:无进球比赛记录未出现在查询结果中
你遇到的问题核心在于连接类型的选择:当前使用的JOIN(默认是内连接INNER JOIN)只会返回两张表中满足匹配条件的记录。对于没有进球的比赛,goal表中不存在对应的matchid条目,所以内连接会直接过滤掉这些game记录,导致它们没出现在结果里。
要保留所有比赛(包括无进球的),你需要把内连接换成左连接(LEFT JOIN)。左连接的特性是保留左表(这里是game表)的所有行,即便右表(goal)中没有匹配的记录,此时右表的字段会以NULL填充。
修改后的查询语句如下:
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 matchid = id GROUP BY id, mdate, team1, team2 ORDER BY mdate, matchid, team1, team2
为什么这样能解决问题?因为左连接会保留所有game记录,对于无进球的比赛,teamid是NULL,你的CASE WHEN会触发ELSE 0的分支,SUM计算后得到的score1和score2就是0,正好符合你想要展示无进球比赛的需求。
内容的提问来源于stack exchange,提问作者kmort
相关产品推荐
相关产品推荐

