数据库很简单。下面是与此问题相关的模式的一部分。
(round_id, round_number)
team_id, team_name)
match_id, match_date, round_id)
team_id, match_id, score)
我在查询检索所有比赛的数据时遇到了问题。下面的简单查询当然给出了每场比赛的两行。
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)?
发布于 2011-06-19 11:18:51
您几乎可以使用outcome表上的自联接从原始表生成建议的更改:
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作为连接的一部分,您可以生成每个匹配的一行。
发布于 2011-06-19 11:00:31
每次比赛你取两行,但team_id和team_name是不同的:-一排是主场的,一排是客场的。
所以你的查询很好
发布于 2011-06-19 11:04:33
正如您描述的那样,使用match表可以简单、自然地捕捉到游戏的逻辑,另外还可以显示主场和客场的球队,而您的初始模型并不这样做。您可能希望将圆形id添加为圆桌的外键,或者添加一个标志来表示匹配的放弃情况。
https://stackoverflow.com/questions/6401932
复制相似问题