假设我有一个具有以下形状的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值上打印出名称。
答案 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
表在联接中有两个用途的别名h
和a
- 一次作为“主页”(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
两次,因此您需要为此表提供不同的别名。