You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL8.0用INNER JOIN关联MAX(DateUpdated)最新记录更新Child表状态

MySQL 8.0 关联最新Enrolment记录更新Child表方案

你原有的SQL出现异常的原因是关联时匹配到了同一个EnrolmentId对应的多条Enrolment记录,会导致更新时状态不确定。可以通过窗口函数ROW_NUMBER()先提取每个EnrolmentId对应的最新记录,再关联更新,实现代码如下:

UPDATE child c
INNER JOIN (
    SELECT 
        EnrolmentId,
        EnrolmentStatus,
        ROW_NUMBER() OVER (PARTITION BY EnrolmentId ORDER BY DateUpdated DESC) AS rn
    FROM enrolment
) e ON c.EnrolmentId = e.EnrolmentId AND e.rn = 1
SET c.EnrolmentStatus = e.EnrolmentStatus;

逻辑说明

  • PARTITION BY EnrolmentId:将Enrolment表的记录按EnrolmentId分组,同一ID的记录分到同一组
  • ORDER BY DateUpdated DESC:每组内按更新时间倒序排序,最新的记录排在最前,对应rn值为1
  • 关联时仅匹配e.rn = 1的记录,保证每个Child记录只会关联到一条最新的Enrolment状态,避免重复关联的问题

如果存在同一个EnrolmentId有两条完全相同DateUpdated的最新记录,可以在排序规则后追加额外字段(比如表主键ID)保证排序唯一:

ROW_NUMBER() OVER (PARTITION BY EnrolmentId ORDER BY DateUpdated DESC, 主键字段名 DESC) AS rn

内容的提问来源于stack exchange,提问作者snowflakes74

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 07:54:04