如何为给定键连接4个表(MYSQL)
我已经建立了一个足球数据库,现在需要做一些查询,但需要一些建议: So 4表:如何为给定键连接4个表(MYSQL),mysql,sum,subquery,inner-join,Mysql,Sum,Subquery,Inner Join,我已经建立了一个足球数据库,现在需要做一些查询,但需要一些建议: So 4表: 球员 管理者 火柴 团队 需要提取显示以下内容的结果: 前100名得分手 球员(姓名)|球队(姓名)|比赛(进球)|经理(姓名) 如果: 玩家表包含playerid,managerid,teamid,name 管理者包含managerid,名称 火柴包含matchid,球员ID,进球 团队包括:teamid,名称 现在我有一些单独的东西,比如: "SELECT players.nam
- 球员
- 管理者
- 火柴
- 团队
- 玩家表包含playerid,managerid,teamid,name
- 管理者包含managerid,名称
- 火柴包含matchid,球员ID,进球
- 团队包括:teamid,名称
"SELECT players.name, teams.name, matches.goals, managers.name
FROM players
INNER JOIN ????
ORDER BY matches.goals";
那么,假设其他一切都是正确的,我应该在内部联接中放置什么呢
谢谢 您可以加入、聚合或只是加入,并使用子查询计算目标:
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
使用
内部联接
联接表中匹配键的行
- 每个
JOIN
组合两个表的记录
ON
指定应匹配的列
internal
表示只在记录匹配的地方加入
使用groupby
对所选(加入的)记录进行分组(聚合)
- 在GROUP子句中,列出应分组的所有列(仅结果中的不同值)
- 在选择列表中,您可以使用聚合函数指定可选的聚合列,如
SUM(goals)
将列goals
聚合为SUM
带有列(-list)和方向的排序依据对结果集进行排序(在限制之前)
最后,LIMIT
关键字后跟多个结果将剪切您的结果集(适用于TOP x查询)。您可能会发现下面格式化的SQL代码中缺少语法突出显示。这是因为这个限制性关键字不是ANSI-SQL标准的一部分
选择
player.name作为player,
team.name作为团队,
manager.name作为经理,
总进球数(比赛进球数)
从比赛
在match.playerid=player.playerid上内部加入玩家
player.managerid=manager.managerid上的内部加入管理器
在player.teamid=team.teamid上加入内部团队
按匹配顺序。目标描述
按player.name、team.name、manager.name分组
上限为100;
注意:总得分是特定组合的所有得分之和,即给定球员在给定教练指导下与给定团队一起得分
我为列添加了带有as
的别名(否则您可能会在输出中看到多个带有模糊标签的列name
。准确地回答了这个问题。虽然它可能包含重复项,因为没有使用groupby
进行distint,谢谢@hc_dev的评论,我没有注意到MYSQL标记,或者问题是后来编辑的。再次感谢。sub selelect作为简易附加组件应用。将SUM的结果别名为cnt_goals
,这里似乎最自然地解释了“目标计数”;不要与常见的使用“cnt_3;”作为计数结果前缀的做法混淆
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;