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

MySQL更新时仅修改单条匹配行而非全部匹配行问题求助

MySQL关联更新时同序列号仅更新单条记录方案

兼容所有MySQL版本的实现

直接通过分组取每个序列号对应最小Slave ID的记录,仅更新该部分匹配条目:

UPDATE item_storage ist
INNER JOIN (
  -- 取每个序列号对应的最小Slave ID记录
  SELECT serial, MIN(slave_id) AS min_slave_id
  FROM item_storage
  GROUP BY serial
) ist_filter ON ist.serial = ist_filter.serial AND ist.slave_id = ist_filter.min_slave_id
INNER JOIN operation op ON ist.serial = op.serial
SET 
  ist.current_operation = op.current_operation,
  ist.id = op.id;

MySQL 8.0+ 更灵活的实现(支持随机选记录)

用窗口函数实现,修改排序规则即可切换选最小Slave ID还是随机选一条:

WITH ranked_storage AS (
  SELECT 
    *,
    -- 按序列号分组,按Slave ID升序排序,rn=1即为最小Slave ID的记录
    -- 要随机选的话把ORDER BY slave_id ASC改成ORDER BY RAND()即可
    ROW_NUMBER() OVER (PARTITION BY serial ORDER BY slave_id ASC) AS rn
  FROM item_storage
)
UPDATE item_storage ist
INNER JOIN ranked_storage rs 
  ON ist.serial = rs.serial 
  AND ist.slave_id = rs.slave_id 
  AND rs.rn = 1
INNER JOIN operation op ON ist.serial = op.serial
SET 
  ist.current_operation = op.current_operation,
  ist.id = op.id;

注意事项

  • 正式执行前可以把UPDATE语句改成SELECT查询,确认匹配的条目符合预期,避免误更新数据
  • 建议给两个表的serial字段添加索引,可大幅提升大表场景下的执行效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:51:03