首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >小型足球联赛的建模数据库

小型足球联赛的建模数据库
EN

Stack Overflow用户
提问于 2011-06-19 10:51:15
回答 4查看 2K关注 0票数 0

数据库很简单。下面是与此问题相关的模式的一部分。

(round_id, round_number)

  • TEAM (team_id, team_name)

  • MATCH (match_id, match_date, round_id)

  • OUTCOME (team_id, match_id, score)

我在查询检索所有比赛的数据时遇到了问题。下面的简单查询当然给出了每场比赛的两行。

代码语言:javascript
复制
select * 
from round r 
inner join match m on m.round_id = r.round_id 
inner join outcome o on o.match_id = m.match_id 
inner join team t on t.team_id = o.team_id

如何编写查询才能将匹配数据放在一行中?

或者我应该重新设计数据库--删除OUTCOME表并修改MATCH表,如下所示:

(match_id, match_date, team_away, team_home, score_away, score_home)?

  • MATCH
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-19 11:18:51

您几乎可以使用outcome表上的自联接从原始表生成建议的更改:

代码语言:javascript
复制
select o1.team_id team_id_1,
       o2.team_id team_id_2,
       o1.score score_1,
       o2.score score_2,
       o1.match_id match_id
from outcome o1
inner join outcome o2 on o1.match_id = o2.match_id and o1.team_id < o2.team_id

当然,家庭和外地的信息是不可能生成的,所以您建议的替代方法可能会更好。另外,请注意条件o1.team_id < o2.team_id,它消除了冗余的对称匹配数据(实际上,它也消除了与自身连接的同一个outcome行,这可以被看作是更重要的方面)。

在任何情况下,使用此select作为连接的一部分,您可以生成每个匹配的一行。

票数 1
EN

Stack Overflow用户

发布于 2011-06-19 11:00:31

每次比赛你取两行,但team_id和team_name是不同的:-一排是主场的,一排是客场的。

所以你的查询很好

票数 0
EN

Stack Overflow用户

发布于 2011-06-19 11:04:33

正如您描述的那样,使用match表可以简单、自然地捕捉到游戏的逻辑,另外还可以显示主场和客场的球队,而您的初始模型并不这样做。您可能希望将圆形id添加为圆桌的外键,或者添加一个标志来表示匹配的放弃情况。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6401932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档