SQL关联问题:teams表与games表双向Team_ID关联无结果解决方法
问题分析与解决方案
你的SQL语句没有返回结果的核心原因是JOIN条件逻辑错误:你用AND连接了list.Team_ID = games.games_away和list.Team_ID = games.games_home,这意味着要求同一支球队在同一场比赛中既是主队又是客队——这显然不符合实际比赛规则,所以自然查不到任何匹配记录。
正确的关联查询写法
方法1:使用OR替换AND
这是最直接的修改方式,只要球队是比赛的主队或客队,就能关联到对应的比赛记录:
SELECT list.*, games.* FROM list INNER JOIN games ON list.Team_ID = games.games_away OR list.Team_ID = games.games_home;
如果需要明确区分球队在这场比赛中是主场还是客场,可以额外添加一个计算列:
SELECT list.*, games.*, CASE WHEN list.Team_ID = games.games_home THEN '主场' WHEN list.Team_ID = games.games_away THEN '客场' END AS team_role FROM list INNER JOIN games ON list.Team_ID = games.games_away OR list.Team_ID = games.games_home;
方法2:使用UNION ALL拆分查询
当数据表数据量较大时,OR可能会导致查询性能下降,这时可以用UNION ALL分别查询球队作为主场和客场的记录,再合并结果:
-- 球队作为主场的比赛记录 SELECT list.*, games.*, '主场' AS team_role FROM list INNER JOIN games ON list.Team_ID = games.games_home UNION ALL -- 球队作为客场的比赛记录 SELECT list.*, games.*, '客场' AS team_role FROM list INNER JOIN games ON list.Team_ID = games.games_away;
UNION ALL不会对结果去重,比UNION更高效,适合没有重复记录的场景。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

