我有一个匹配表,其结构显示在这里
在此表中,我有teama列,teamb列,它们是引用team
表的t_id
的外键列。基本上,我想做的是,当我从该表中选择所有数据时,我希望它显示teama
和teamb
中的值,而不是它们的t_id
中的值。团队表的结构在这里
我正在写的查询如下:
select *
from teams,matches
where
matches.team_a=teams.t_id
and matches.team_b=teams.t_id;
答案 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;