如何为给定的键连接4个表(MYSQL)



我已经创建了一个足球数据库,现在需要进行一些查询,但需要一些建议:

所以4张表:

  • 玩家

  • 经理

  • 匹配

  • 团队

需要提取显示的结果:

前100名进球者

球员(姓名(|球队(名称(|比赛(进球(|经理(姓名(

如果:,代码会是什么样子

  • 玩家表包含playeridmanageridteamid

  • 管理者包含:managerid,名称

  • Matches包含比赛ID球员ID,进球

  • 团队包含:团队ID,名称

现在我有一些单独的东西,行:

"SELECT players.name, teams.name, matches.goals, managers.name
FROM players
INNER JOIN ????
ORDER BY matches.goals";

那么,假设其他一切都是正确的,我应该在INNER JOIN中放入什么呢?

谢谢!

使用INNER JOIN连接ON匹配键中的行。

  • 每个JOIN组合两个表的记录
  • ON指定应匹配的列
  • INNER表示,仅在记录匹配的情况下加入

使用GROUP BY对所选(加入的(记录进行分组(聚合(。

GROUP子句中的
  • 列出了应分组的所有列(仅结果中的不同值(
  • 选择列表中,可以使用聚合函数指定可选的聚集列,如SUM(goals)将列goals聚合为总和

具有(-list(和方向ORDER BY对结果集进行排序(在限制之前(。

最后,LIMIT关键字后面跟着数量的结果会剪切结果集(适用于TOP x查询(。您可能会在下面格式化的SQL代码中发现缺少语法高亮显示。这是因为这个限制性关键字不是ANSI-SQL标准的一部分。

SELECT
player.name as player,
team.name as team,
manager.name as manager,
SUM(match.goals) as scored_goals
FROM Matches match
INNER JOIN Players player ON match.playerid = player.playerid
INNER JOIN Managers manager ON player.managerid = manager.managerid
INNER JOIN Teams team ON player.teamid = team.teamid
ORDER BY match.goals DESC
GROUP BY player.name, team.name, manager.name
LIMIT 100;

注意:scored_goals特定组合的所有进球之和,即给定球员在给定教练的带领下与给定球队一起进球。

我为这些列添加了带有as的别名(否则,您可能会在输出中看到多个标记不明确的列name(。

您可以加入、聚合或只是加入,并使用子查询来计算目标:

select p.name as player_name, t.name as team_name, m.name as manager_name, 
(select sum(g.goals) from matches g where g.playerid = p.playerid) cnt_goals
from players p
inner join managers m on m.managerid = p.managerid
inner join teams t on t.teamid = p.teamid
order by cnt_goals desc limit 100
SELECT P.name, 
T.name, 
MA.goals, 
M.name 
FROM   matches MA 
INNER JOIN players P 
ON MA.playerid = P.playerid 
INNER JOIN managers M 
ON P.managerid = M.managerid 
INNER JOIN teams T 
ON P.teamid = T.teamid 
ORDER  BY MA.goals DESC 
LIMIT  100; 

最新更新