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

SQL如何按合同号分组将role=27行的beginn值复制到同组role=14行

问题原因

你原来的写法缺少contract字段的关联匹配,导致无法按合同号分组对应数值,会出现所有role=14的行都取到同一个值甚至执行报错的问题。


正确SQL实现

通用关联更新写法(适用于PostgreSQL、SQL Server、MySQL 8.0+)

UPDATE MyTable t1
SET beginn = t2.beginn
FROM MyTable t2
WHERE 
  t1.contract = t2.contract 
  AND t1.role = 14 
  AND t2.role = 27;

老版本MySQL适配写法

UPDATE MyTable t1
JOIN MyTable t2 
  ON t1.contract = t2.contract 
  AND t2.role = 27
SET t1.beginn = t2.beginn
WHERE t1.role = 14;

逻辑说明

  • 用同表自连接,通过contract字段关联两个角色的行,天然实现按合同号分组匹配的需求,不需要额外写GROUP BY
  • 只有同合同号下同时存在role=27和role=14的行时,才会触发更新,完全符合你的业务要求

特殊场景兼容:如果同一合同号下存在多个role=27的行,可以先对role=27的数据集按contract聚合后再关联,示例:

UPDATE MyTable t1
SET beginn = t2.beginn
FROM (
  SELECT contract, MAX(beginn) AS beginn 
  FROM MyTable 
  WHERE role=27 
  GROUP BY contract
) t2
WHERE 
  t1.contract = t2.contract 
  AND t1.role = 14;

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

相关产品推荐
方舟 Agent Plan

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

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