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

How to join 4 tables for given keys (MYSQL)

我做了一个足球数据库,现在需要做一些查询,但需要一些建议:

所以 4 tables:

需要拉取显示的结果:

前 100 名射手

玩家(姓名) |团队(名称) |比赛(进球) |经理(姓名)

代码会是什么样子如果:

现在我有一些单独的内容:

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

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

谢谢!

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

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; 

使用INNER JOIN连接来自ON匹配键.

的行
  • 每个JOIN合并了两个表的记录
  • ON 指定应匹配的列
  • INNER 表示,仅在记录匹配的地方加入

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

  • 在 GROUP 子句中列出所有应分组的列(仅结果中的不同值)
  • select-list 中,您可以使用 [=73= 指定可选的 聚合列 ],如 SUM(goals) 将列 goals 聚合为 sum

具有(-列表)和方向ORDER BY排序result-set(限制之前).

最后 LIMIT 关键字后跟 个结果 削减了你的 result-set(适用于 TOP x 查询)。您可能会发现下面格式化的 SQL 代码中缺少 syntax-highlighting。这是因为 limiting-keyword 不是 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)。