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

MySQL执行update left join时如何选取右表Time taken最大值的对应记录

解决方案

实现思路

你当前的SQL会匹配右表所有符合关联条件的记录,无法自动筛选Time taken最大值对应的条目,需要先对右表按Id、Receiver分组,过滤出每组内Time taken最大的唯一记录后再关联更新。

适配全MySQL版本写法

UPDATE tableA a
LEFT JOIN (
    -- 筛选每个Id+Receiver分组下Time taken最大的记录
    SELECT b1.*
    FROM tableB b1
    INNER JOIN (
        SELECT Id, Receiver, MAX(`Time taken`) AS max_time
        FROM tableB
        GROUP BY Id, Receiver
    ) b2 ON b1.Id = b2.Id AND b1.Receiver = b2.Receiver AND b1.`Time taken` = b2.max_time
) b ON a.Id = b.Id AND a.Receiver = b.Receiver
SET a.guid = b.guid, a.item = b.item
WHERE a.guid IS NULL;

MySQL 8.0+ 窗口函数简化写法

UPDATE tableA a
LEFT JOIN (
    SELECT *,
        ROW_NUMBER() OVER (PARTITION BY Id, Receiver ORDER BY `Time taken` DESC) AS rn
    FROM tableB
) b ON a.Id = b.Id AND a.Receiver = b.Receiver AND b.rn = 1
SET a.guid = b.guid, a.item = b.item
WHERE a.guid IS NULL;

注意事项

  • 带空格的字段名Time taken需要用反引号包裹,避免触发语法错误
  • 注意字段名拼写对齐,你原SQL里写的items和表结构实际的item字段名不一致,需要修正
  • 若存在同一分组下多条Time taken相同的最大记录,可在窗口函数的ORDER BY后追加排序规则(比如按guid倒序),保证匹配结果唯一

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:45:04