如何获取对应同一个键的两个外键列的值?

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;  

将其改写为人工程序:

  1. 使用 match_api_id 查找 Match table 中的 Match 行。
  2. Match 行中取出 away_team_api_id 并使用它在 Team table 中查找团队。将该球队的 team_long_name 报告为客队长名。
  3. Match 行中取出 home_team_api_id 并使用它在 Team table 中查找团队。报告该球队的 team_long_name 作为主队的全名。