2016-01-17 85 views
1

我有一個足球比賽的數據庫。保存匹配的表使用外鍵來存儲團隊(分別爲team1和team2 - 主機和來賓)。我需要將結果與團隊表中的結果結合起來。在表中兩次相同的外鍵

match: 

+-----------------+------------------+------+-----+---------+----------------+ 
| Field   | Type    | Null | Key | Default | Extra   | 
+-----------------+------------------+------+-----+---------+----------------+ 
| match_id  | int(10) unsigned | NO | PRI | NULL | auto_increment | 
| championship_id | int(10) unsigned | YES | MUL | NULL |    | 
| team1_id  | int(10) unsigned | YES | MUL | NULL |    | 
| team2_id  | int(10) unsigned | YES | MUL | NULL |    | 
| factor_1  | decimal(4,2)  | YES |  | NULL |    | 
| factor_x  | decimal(4,2)  | YES |  | NULL |    | 
| factor_2  | decimal(4,2)  | YES |  | NULL |    | 
| goals_team_1 | tinyint(4)  | YES |  | NULL |    | 
| goals_team_2 | tinyint(4)  | YES |  | NULL |    | 
| match_date  | date    | YES |  | NULL |    | 
+-----------------+------------------+------+-----+---------+----------------+ 

team: 

+---------+------------------+------+-----+---------+----------------+ 
| Field | Type    | Null | Key | Default | Extra   | 
+---------+------------------+------+-----+---------+----------------+ 
| team_id | int(10) unsigned | NO | PRI | NULL | auto_increment | 
| name | varchar(32)  | YES |  | NULL |    | 
+---------+------------------+------+-----+---------+----------------+ 

我的猜測是,使用此查詢,但它是無效的:

SELECT match.match_id, team.name, team.name, match.match_date 
FROM `match` 
INNER JOIN `team` 
ON match.team1_id=team.team_id, 
match.team2_id=team.team_id 
+2

使用兩個團隊而不是一個 – Ejaz

+0

您的查詢不是無效的方式。它只會返回0行(除非你有一些團隊與自己對抗的比賽)! –

回答

2

你必須加入team表兩次,使用別名來區分每個加盟,就像這樣:

SELECT match.match_id, team1.name, team2.name, match.match_date 
FROM `match` 
INNER JOIN `team` as team1 ON match.team1_id=team1.team_id 
INNER JOIN `team` as team2 ON match.team2_id=team2.team_id