如何在sql表上获取匹配的名称到id?

时间:2014-08-15 09:45:47

标签: mysql sql database

假设我有一个具有以下形状的MATCH表;

id, home_id, away_id, date, season_id
1,  4,       , 5      xxxx, 3
2,  3,       , 2      xxxx, 4
....

我还为每个id列都有表,包括与给定id匹配的名称。

TEAMS表

id, name
1, FC Bayern
2, Monaco
...

SEASON表

id, season_name
 1, summer
 2, winter
 ....

所以我想把名字放到第一张桌子而不是ids。在大型SQL DB中执行此操作的最有效方法是什么? Final table应该在匹配的id值上打印出名称。

2 个答案:

答案 0 :(得分:1)

您需要联接才能从其他表中获取项目。由于您有三个要替换的ID,因此需要三个连接:

SELECT m.id, h.name, a.name, date, s.name
FROM match m
JOIN TEAMS h ON m.home_id = h.id
JOIN TEAMS a ON m.away_id = a.id
JOIN SEASON s ON m.season_id = s.id

这里棘手的部分是你要加入同一张桌子(TEAMS)两次。这是因为你需要从中查找两个名字。当您进行类似的连接时,每次参与连接时都会为表提供一个别名,然后引用该别名而不是表名。

在上面的示例中,TEAMS表在联接中有两个用途的别名ha - 一次作为“主页”(h)和曾经作为“离开”(a)团队查询表。

答案 1 :(得分:1)

只需将表格连在一起。没什么特别的吗

select m.id, home.name, away.name, m.date, s.name 
from match m
join teams home on m.home_id = home.id
join teams away on m.away_id = away.id
join season s on m.season_id = s.id

由于您需要加入teams两次,因此您需要为此表提供不同的别名。