【问题标题】:how to fetch matching names to ids on an sql table?如何获取与 sql 表上的 id 匹配的名称?
【发布时间】:2014-08-15 09:45:46
【问题描述】:

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

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

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

团队表

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

季节表

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

所以我想获得第一个表的名称而不是 id。在大型 SQL DB 中执行此操作的最有效方法是什么?决赛桌应在匹配的 id 值上打印出名称。

【问题讨论】:

  • 这是一个相当基本的查询,你有没有尝试过?

标签: mysql sql database


【解决方案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两次,你需要给这个表一个不同的别名。

【讨论】:

  • 您对该查询的运行时复杂性有何看法,尤其是对于大型数据库而言
  • 适当的索引很好。而且我想不出更简单的方法。
【解决方案2】:

您需要连接才能从不同的表中获取项目。由于要替换三个 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),一次作为“离开”(@ 987654327@) 团队查找表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 2011-07-14
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多