如何将GameScores表的FK替换为Teams表对应值并保留原列名?
解决方案:替换外键为球队名称并保留原列名
问题分析
你写的SQL存在两个核心问题:
- 只和Teams表做了一次内连接,只能拿到主队的名称,没法关联到客队的球队信息
- 两个
Teams.TeamName字段没指定别名,结果里会出现重复列名,也没法对应原GameScores表的HomeTeam、AwayTeam列名要求
正确SQL语句
需要两次连接Teams表,分别为主队和客队指定不同的表别名,再通过AS关键字把球队名称映射成原列名:
SELECT GameScores.GameID, HomeTeamInfo.TeamName AS HomeTeam, AwayTeamInfo.TeamName AS AwayTeam, GameScores.HomeTeamScore, GameScores.AwayTeamScore FROM GameScores INNER JOIN Teams AS HomeTeamInfo ON GameScores.HomeTeam = HomeTeamInfo.TeamID INNER JOIN Teams AS AwayTeamInfo ON GameScores.AwayTeam = AwayTeamInfo.TeamID
说明
- 用
HomeTeamInfo和AwayTeamInfo作为Teams表的别名,区分主队和客队的关联逻辑 - 通过
AS HomeTeam和AS AwayTeam将球队名称字段重命名为原GameScores表的列名,完全匹配你的需求 - 内连接(INNER JOIN)只会返回有对应球队信息的赛事记录,如果需要保留无对应球队的赛事,可把
INNER JOIN换成LEFT JOIN
内容的提问来源于stack exchange,提问作者MSG89
相关产品推荐
相关产品推荐

