You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL LEFT JOIN与WHERE子句问题:查询指定玩家的所有赛事得分

解决LEFT JOIN只返回匹配行的问题

你猜的没错!问题确实出在WHERE子句上,我来给你捋清楚怎么调整:

首先,你遇到的核心问题是过滤时机不对:当你用LEFT JOIN时,events表的所有行本来都会被保留,但把results.playerID=1放在WHERE子句里后,那些没有匹配到该玩家的行中,results.playerID的值是NULL,而NULL=1的判断不成立,这些行就被直接过滤掉了,所以最终只返回了有得分的赛事。

正确的做法是把玩家ID的条件移到LEFT JOIN的ON子句中,这样在关联阶段就只匹配该玩家的结果,而不是关联完成后再过滤。具体SQL语句如下:

SELECT events.eventID, results.totalScore
FROM events 
LEFT OUTER JOIN results 
  ON events.eventID = results.eventID 
  AND results.playerID = 1;

为什么这么改?

  • 当条件写在ON子句时,LEFT JOIN会先根据eventID关联两张表,同时只保留results表中playerID=1的行;对于没有匹配到该玩家的events行,results的字段会自动填充为NULL,不会被剔除。
  • 而如果条件写在WHERE子句,是在关联完成后再做过滤,此时无匹配行的results.playerID是NULL,不满足=1的条件,就被过滤掉了。

执行这条语句后,玩家1的查询结果就完全符合你的需求:

eventIDtotalScore
134
2NULL
336

另外,你原来的SELECT语句里包含了results.playerID,其实没必要保留——因为我们已经限定了只查询玩家1的结果,无匹配行里这个字段也是NULL,对结果展示没有帮助。

内容的提问来源于stack exchange,提问作者Jon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 11:49:09