INNER JOIN关联teams表无法同时获取主客场球队名及缩写问题
解决方案
不需要用UNION实现这个需求,当前查询无法同时返回主客场数据的核心原因是:仅对teams表做了一次关联,且关联条件只匹配主场球队ID,所以查询到的所有teams表字段都对应主场球队信息。
要同时拿到主客场两队的信息,只需要给teams表设置不同的别名,分别和主场ID、客场ID做两次关联即可,修正后的SQL如下:
SELECT g.home, g.away, t_home.name AS home_name, t_home.abbreviation AS home_abbr, t_away.name AS away_name, t_away.abbreviation AS away_abbr FROM games g INNER JOIN teams t_home ON g.home = t_home.id INNER JOIN teams t_away ON g.away = t_away.id WHERE g.date >= '2022-01-01';
写法说明
- 给表设置别名是为了简化SQL书写,同时区分同一张表的两次关联逻辑:
- 别名
t_home的teams表关联主场球队ID,查询到的name、abbreviation字段对应主场球队信息 - 别名
t_away的teams表关联客场球队ID,查询到的name、abbreviation字段对应客场球队信息
- 别名
- 如果
games表存在主客场ID为空的异常数据,且需要保留这些比赛记录,可以把INNER JOIN替换为LEFT JOIN,避免关联不到球队数据时整条比赛记录被过滤。
内容的提问来源于stack exchange,提问作者Zokhid Juraev
相关产品推荐
相关产品推荐

