根据团队ID查询Home and Away团队的SQL数据库

时间:2014-03-15 22:40:53

标签: sql sql-server database

我正在使用Betfair的数据建立一个足球(足球)投注数据库。这是我的第一个数据库,我在MS SQL Server 2012中工作。 我已经设置了4个表:Match,Team,Competition&数据。 我的匹配表包含列:MatchID(PK),CompetitionID(FK),DateKickOff,TimeKickOff,TeamIDHome(FK),TeamIDAway(FK),ScoreHome,ScoreAway 我的团队表包含列:TeamID(PK),TeamName

我在这个阶段一直在尝试一些查询,以便我可以考虑我的表是否正确归一化。我想运行一个返回4列的查询:主队名称,主场得分,客场得分,客队名称。

如果我运行这个,我会得到前3列:

SELECT TeamName TeamH, ScoreHome, ScoreAway
FROM Match AS t
    INNER JOIN Team AS n
    ON t.TeamIDHome = n.TeamID

如果我这样做,我会得到第四列:

SELECT TeamName TeamA
FROM Match AS t
    INNER JOIN Team AS n
    ON t.TeamIDAway = n.TeamID

但我无法联合2个函数,因为我收到错误:使用UNION,INTERSECT或EXCEPT运算符组合的所有查询必须在其目标列表中具有相同数量的表达式。 我认为错误是因为它试图将Away Team Names添加到与主队名称相同的列。任何人都可以建议我如何正确查询这个或者让我知道我的数据库设计是否错误?感谢

1 个答案:

答案 0 :(得分:1)

您不需要两个查询。将另一个联接添加到Team,将Match.TeamIdAway与team.TeamId链接起来。像:

select HomeTeam.TeamName as TeamH, AwayTeam.Teamname as TeamA, M.ScoreHome, M.ScoreAway
from Match as M
join Team as HomeTeam on M.TeamIdHome = HomeTeam.TeamId
join Team as AwayTeam on M.TeamIdAway = AwayTeam.TeamId