我正试图捕捉一个mysql的概念,例如我将为2on2篮子游戏采用数据库。表格是:
matches(**matchid**,teamAId,nationalityAOd,teamBId,nationalityBId)
teams(**teamId**,playerAname,playerBname)
nationalities(**natId**,natName)
创建团队和国籍表以限制相同事件的冗余(USA USA USA ....) 有没有办法让查询结果成为游戏的完整数据,比如
1 jim jake USA tony joe ITA
2 carlos gabriel SPA dan chris ENG
...
按matchId分组?这个概念很简单,但我尝试的所有查询都不好,因为如果我说
WHERE teamAId=teamId AND teamBId=teamId
我显然什么都没得到,因为那里寻找的是与自己比赛的球队,但如果我说
WHERE teamAId=teamId OR teamBId=teamId
我每场比赛得到两条记录,每条记录只包含一个团队的数据,而这不是我想要的。为了这个愚蠢,我提前感谢谁会给我一个提示!干杯
答案 0 :(得分:0)
您可以使用 INNER JOIN
SELECT t1.PlayerAName, t1.PlayerBName, n1.natName,
t2.PlayerAName, t2.PlayerBName, n2.natName
FROM matches m
INNER JOIN teams t1 ON t1.teamID = m.teamAID
INNER JOIN teams t2 ON t2.teamID = m.teamBID
INNER JOIN nationalities n1 ON n1.natID = m.nationalityAID
INNER JOIN nationalities n2 ON n2.natID = m.nationalityBID
WHERE m.matchID = <match id here>
这应该允许您将多行中的数据放在同一行中,并按匹配ID进行过滤,因为它们是共同的。只需将匹配ID放在where子句中。