MySQL同表内如何将指定ID行的内容复制到其他多个ID对应行
MySQL同表指定行字段复制更新方案
推荐实现写法(兼容MySQL全版本)
使用自连接更新逻辑,性能更高、可读性更强:
UPDATE market t_target INNER JOIN market t_source ON t_source.ID = 4 SET t_target.fruits = t_source.fruits, t_target.ripeness = t_source.ripeness WHERE t_target.ID IN (1, 2);
可选子查询写法
如果更习惯子查询逻辑,需要额外嵌套一层临时表,规避MySQL同表同时查询+更新的语法限制:
UPDATE market SET fruits = (SELECT fruits FROM (SELECT fruits FROM market WHERE ID = 4) AS temp_t), ripeness = (SELECT ripeness FROM (SELECT ripeness FROM market WHERE ID = 4) AS temp_t) WHERE ID IN (1, 2);
注意事项
- 执行更新前建议先运行对应SELECT语句校验数据,避免误修改:可先执行
SELECT * FROM market WHERE ID IN (1,2)确认目标行范围,也可以将UPDATE语句替换为SELECT预览待更新的字段值是否符合预期。 - 如果需要扩展更多复制字段,只需在SET子句后追加对应字段的赋值规则即可,无需修改其他逻辑。
- 以上语句默认适配MySQL 5.7及以上版本,其他数据库可根据对应语法规则微调。
内容的提问来源于stack exchange,提问作者mark-in-motion
相关产品推荐
相关产品推荐

