显示外键列的名称而不是其ID

时间:2018-12-31 11:15:29

标签: mysql sql

我有一个匹配表,其结构显示在这里

enter image description here

在此表中,我有teama列,teamb列,它们是引用team表的t_id的外键列。基本上,我想做的是,当我从该表中选择所有数据时,我希望它显示teamateamb中的值,而不是它们的t_id中的值。团队表的结构在这里

enter image description here

我正在写的查询如下:

select * 
from teams,matches 
where 
    matches.team_a=teams.t_id 
    and matches.team_b=teams.t_id;

4 个答案:

答案 0 :(得分:2)

您需要将matches的2列连接到teams表:

select 
  m.m_id, 
  t1.t_name as team_a, 
  t2.t_name as team_b, 
  m.m_time
from 
  matches m inner join teams as t1 on m.team_a=t1.t_id
  inner join teams as t2 on m.team_b=t2.t_id
order by m.m_id;

答案 1 :(得分:1)

首先,切勿在{{1​​}}子句中使用逗号。始终使用正确的,明确的标准 FROM语法。实际上,您需要两个JOIN

JOIN

这使用select m.*, ta.t_name as name_a, tb.t_name as name_b from matches m left join teams ta on m.team_a = ta.t_id left join teams tb on m.team_b = tb.t_id; 只是为了确保您获得所有比赛,即使其中一支球队失踪了。在这种情况下,这可能不是重要的考虑因素,因此left join将是等效的。

答案 2 :(得分:1)

您希望从表比赛到表团队有两个INNER JOIN,例如:

@objc protocol SomethingAble {
    @objc optional func optionalMethod()
}

答案 3 :(得分:-1)

您可以在加入视图后创建视图,这使您的工作变得容易进行进一步的开发,我改进了forbas先生的代码,如下所示

CREATE VIEW team AS select 
m.m_id, 
t1.t_name as team_a, 
t2.t_name as team_b, 
m.m_time
 from 
matches m inner join teams as t1 on m.team_a=t1.t_id
inner join teams as t2 on m.team_b=t2.t_id
 order by m.m_id;