首页 > 解决方案 > 体育比赛 MySQL 查询以特定顺序加入比赛和球队

问题描述

我想为运动比赛创建一个数据库。

一支球队可以有 0 场或 1 场比赛。一场比赛总是有 2 支球队。

我必须存储的示例数据:

我考虑为matchteam创建一个表。Match得到了A和B的开始时间和外键。Team得到了名字和得分。

现在我的问题/问题:

我想搜索一个团队名称并收到这样的表格:

--------------------------------------------------------------------
Start | SearchedName | SearchedScore | OpponentName | OpponentScore
 ...  | ...          | ...           | ...          | ...

我怎样才能做到这一点?

标签: mysqlsqljoin

解决方案


您通常会加入该team表两次。

假设如下表结构:

table: "matches"
    id_team_a
    id_team_b
    start_time
    ...

table: "teams"
    id_team
    name

你会去:

select 
    m.*,
    ta.name team_name_a,
    tb.name team_name_b
from matches m
inner join teams ta on ta.id_team = m.id_team_a
inner join teams tb on tb.id_team = m.id_team_b

如果您想通过搜索来处理:

select 
    m.*,
    case when ta.name = @myteam then ta.name else tb.name end search_name,
    case when ta.name = @myteam then tb.name else ta.name end opponent_name
from matches m
inner join teams ta on ta.id_team = m.id_team_a
inner join teams tb on tb.id_team = m.id_team_b
where @myteam in (ta.name, tb.name)

推荐阅读