MYSQL -返回包含最大值的完整行,并将其连接到另一个表



我目前目前有MYSQL查询的麻烦。我搜索了许多stackoverflow问题寻找答案,但没有找到一个。

问题:我有两张表-

teams = |id(主键)|name|sigma|mu|

ranks = |match_id|team_id|mu|sigma|

teams表包含team_id、名称以及sigma和mu(稍后会详细介绍)。团队。Id还可以作为team_id在ranks中的外键。rank包含比赛id和球队id,以及mu和sigma。

基本上,我想找到每个团队id的最大匹配id,并将相应的mu和sigma(从排名表中)分配给团队表中的正确团队。换句话说,我希望teams表中的每个团队都具有与最大match_id对应的sigma和mu值。

我尝试了下面的MYSQL命令:

-- these will serve as the basis for the procdures which update the teams...
SELECT
MAX(ranks.match_id) as max_match,
ranks.team_id as team_id,
teams.id,
teams.name,
ranks.match_id,
ranks.team_id,
FROM
ranks
JOIN teams ON teams.id = team_id
UPDATE
teams
SET
teams.mu = ranks.mu, teams.sigma = ranks.sigma
WHERE
max_match = ranks.match_id
AND team_id = ranks.team_id

这样做我得到一个错误。提前感谢您的帮助。

我也担心我不能做到这一点可能是由于我在MYSQL的理解一个重大错误造成的,所以任何帮助解释我哪里出错将不胜感激。

如果我理解正确的话,您希望update团队拥有最"最近的";和的值。您可以使用updatejoin和窗口函数:

update teams t join
(select r.*,
row_number() over (partition by team_id order by match_id desc) as seqnum
from ranks r
) r
using (team_id)
set t.mu = r.mu,
t.sigma = r.sigma
where seqnum = 1;

最新更新