SQL查询问题:score1与score2均为0的比赛未被检索
解决SQL无法查询到两队均未进球比赛的问题
原SQL使用内连接(JOIN)关联game和goal表,这会自动过滤掉所有在goal表中没有对应记录的比赛——也就是两队都没进球的比赛。要显示所有比赛(包括零进球场次),需要做两处核心修改:
- 将内连接改为左外连接(
LEFT JOIN),确保game表的所有比赛记录都被保留,哪怕goal表中没有对应进球数据 - 用
COALESCE()函数处理SUM()的结果,把无进球时产生的NULL值转为0,保证进球数字段始终显示合理数值
修改后的SQL语句:
SELECT mdate, team1, COALESCE(SUM(CASE WHEN teamid=team1 THEN 1 ELSE 0 END), 0) score1, team2, COALESCE(SUM(CASE WHEN teamid=team2 THEN 1 ELSE 0 END), 0) score2 FROM game LEFT JOIN goal ON matchid = id GROUP BY mdate, matchid, team1, team2 ORDER BY mdate, matchid, team1, team2
关键逻辑说明
LEFT JOIN:以game表为基准,返回所有比赛记录,goal表中无匹配数据时,对应字段会填充为NULLCOALESCE():当SUM()计算结果为NULL(即该比赛无任何进球记录)时,自动替换为0,避免出现空值影响结果展示
内容的提问来源于stack exchange,提问作者k1dr0ck
相关产品推荐
相关产品推荐

