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

MySQL将step为convert的行的originalid值批量更新到全表id列

需求说明

现有一张6字段的数据表,需完成以下操作:提取step字段值为Convert的对应行的originalid字段值,将该值覆盖更新到全表所有行的id字段中。

测试数据SQL

建表及插入测试数据语句如下:

Create table table1 (id varchar(35), originalid varchar(35), dte datetime, step varchar(35), itemno varchar(35), originalid2 varchar(35));
INSERT INTO table1 VALUES ('111111111111','111111111111','2019-01-07 02:22:30','null','null','null'),
('111111111111','111111111111','2019-02-09 02:22:30','null','null','null'),
('111111111111','111111111111','2019-03-11 02:22:30','repair','null','null'),
('111111111111','111111111111','2019-04-07 02:22:30','null','null','null'),
('0001','111111111111','2019-04-10 02:22:30','Convert','0001','111111111111'),
('0001','0001','2019-05-12 02:22:30','null','0001','0001'),
('0001','0001','2019-06-20 02:22:30','null','0001','0001'),
('0001','0001','2019-07-25 02:22:30','null','0001','0001'),
('0001','0001','2019-08-08 02:22:30','null','0001','0001'),
('0001','0001','2019-09-07 02:22:30','Completed','0001','0001');
预期输出
id ------------------originalid-------------Date---------------step
111111111111       |  111111111111 |2019-01-07 02:22:30|
111111111111       |  111111111111 |2019-02-09 02:22:30|
111111111111       |  111111111111 |2019-03-11 02:22:30 |repair
111111111111       |  111111111111 |2019-04-07 02:22:30|
111111111111       |  111111111111 |2019-04-10 02:22:30|convert
111111111111       |  0001          |2019-05-12 02:22:30|
111111111111       |  0001          |2019-06-20 02:22:30|
111111111111       |  0001          |2019-07-25 02:22:30|
111111111111       |  0001          |2019-08-08 02:22:30|
111111111111       |  0001          |2019-09-07 02:22:30|completed
解决方案

MySQL 环境执行语句

MySQL不允许UPDATE直接引用同表子查询,需要多嵌套一层别名避免报错,加LIMIT 1是为了避免出现多条step='Convert'的记录时更新报错,若业务确定只有一条对应记录可删除该限制:

UPDATE table1
SET id = (
    SELECT originalid 
    FROM (SELECT originalid FROM table1 WHERE step = 'Convert' LIMIT 1) AS temp
);

SQL Server / Oracle 环境执行语句

UPDATE table1
SET id = (SELECT originalid FROM table1 WHERE step = 'Convert' AND ROWNUM = 1);

更新完成后可执行以下语句验证结果:

SELECT id, originalid, dte AS `Date`, step FROM table1 ORDER BY dte;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:36:00