如何获取对应同一个键的两个外键列的值?
How to get the values of two foreign key columns when they correspond to the same key?
我需要 SQL 中关于此数据库 https://www.kaggle.com/hugomathien/soccer 的帮助。
我需要一个 SQL 语句,为随机游戏提供 table 的主队名称和客队名称(我选择 Match.match_api_id = 492476)
如果我 运行 这个 :
SELECT Team.team_long_name , Match.home_team_api_id
FROM Team JOIN Match
ON Match.away_team_api_id = Team.team_api_id
WHERE Match.match_api_id = 492476;
我得到了客队名称,但没有得到主队名称(相反,我得到了 Match.home_team_api_id 的值,正如预期的那样)。
如果我 运行 :
SELECT Team.team_long_name , Match.away_team_api_id
FROM Team JOIN Match
ON Match.home_team_api_id = Team.team_api_id
WHERE Match.match_api_id = 492476;
我得到了主队名称,但没有得到客队名称(相反,我得到了 Match.away_team_api_id 的值,正如预期的那样)。
问题是外键 Match.home_team_api_id 和 Match.away_team_api_id 都对应于: Team.team_api_id ,所以当我得到一个时,我“失去”了另一个。
是否有SQL语句在同一个table中同时获取随机比赛的主队名和客队名?
您可以加入 Team
table 两次,一次是客队,一次是主队。 tables 的别名有助于跟踪哪个是哪个。类似于:
SELECT
hometeam.team_long_name homename,
Match.home_team_api_id,
awayteam.team_long_name awayname,
Match.away_team_api_id
FROM Match INNER JOIN Team hometeam
ON Match.home_team_api_id = hometeam.team_api_id
INNER JOIN Team awayteam
ON Match.away_team_api_id = awayteam.team_api_id
WHERE Match.match_api_id = 492476
首先,如果选择标准只是关于Match
table,它应该是你提到的第一个table。
其次,您可以多次使用 JOIN
(或更常用的 INNER JOIN
)。
SELECT T1.team_long_name as Away_team_long_name,
T2.team_long_name as Home_team_long_name
FROM Match
INNER JOIN Team as T1
ON Match.away_team_api_id = T1.team_api_id
INNER JOIN Team as T2
ON Match.home_team_api_id = T2.team_api_id
WHERE Match.match_api_id = 492476;
将其改写为人工程序:
- 使用
match_api_id
查找 Match
table 中的 Match
行。
- 从
Match
行中取出 away_team_api_id
并使用它在 Team
table 中查找团队。将该球队的 team_long_name
报告为客队长名。
- 从
Match
行中取出 home_team_api_id
并使用它在 Team
table 中查找团队。报告该球队的 team_long_name
作为主队的全名。
我需要 SQL 中关于此数据库 https://www.kaggle.com/hugomathien/soccer 的帮助。 我需要一个 SQL 语句,为随机游戏提供 table 的主队名称和客队名称(我选择 Match.match_api_id = 492476) 如果我 运行 这个 :
SELECT Team.team_long_name , Match.home_team_api_id
FROM Team JOIN Match
ON Match.away_team_api_id = Team.team_api_id
WHERE Match.match_api_id = 492476;
我得到了客队名称,但没有得到主队名称(相反,我得到了 Match.home_team_api_id 的值,正如预期的那样)。 如果我 运行 :
SELECT Team.team_long_name , Match.away_team_api_id
FROM Team JOIN Match
ON Match.home_team_api_id = Team.team_api_id
WHERE Match.match_api_id = 492476;
我得到了主队名称,但没有得到客队名称(相反,我得到了 Match.away_team_api_id 的值,正如预期的那样)。 问题是外键 Match.home_team_api_id 和 Match.away_team_api_id 都对应于: Team.team_api_id ,所以当我得到一个时,我“失去”了另一个。
是否有SQL语句在同一个table中同时获取随机比赛的主队名和客队名?
您可以加入 Team
table 两次,一次是客队,一次是主队。 tables 的别名有助于跟踪哪个是哪个。类似于:
SELECT
hometeam.team_long_name homename,
Match.home_team_api_id,
awayteam.team_long_name awayname,
Match.away_team_api_id
FROM Match INNER JOIN Team hometeam
ON Match.home_team_api_id = hometeam.team_api_id
INNER JOIN Team awayteam
ON Match.away_team_api_id = awayteam.team_api_id
WHERE Match.match_api_id = 492476
首先,如果选择标准只是关于Match
table,它应该是你提到的第一个table。
其次,您可以多次使用 JOIN
(或更常用的 INNER JOIN
)。
SELECT T1.team_long_name as Away_team_long_name,
T2.team_long_name as Home_team_long_name
FROM Match
INNER JOIN Team as T1
ON Match.away_team_api_id = T1.team_api_id
INNER JOIN Team as T2
ON Match.home_team_api_id = T2.team_api_id
WHERE Match.match_api_id = 492476;
将其改写为人工程序:
- 使用
match_api_id
查找Match
table 中的Match
行。 - 从
Match
行中取出away_team_api_id
并使用它在Team
table 中查找团队。将该球队的team_long_name
报告为客队长名。 - 从
Match
行中取出home_team_api_id
并使用它在Team
table 中查找团队。报告该球队的team_long_name
作为主队的全名。