用update来把mysql 2个字段交换数据的注意事项

需要把mysql的2个字段交换数据,刚开始想能不能在同一张表中交换数据,例如:

UPDATE tb_test
SET 
    discharge_energy_start = charge_energy_start,
    discharge_energy_end = charge_energy_end,
    charge_energy_start = discharge_energy_start,
    charge_energy_end = discharge_energy_end;

执行后,发现discharge_energy_start 、discharge_energy_end 数据变了,但charge_energy_start 、charge_energy_end 不是自己想要的数据,原来mysql执行是有分先后顺序的,不会缓存一个中间表来进行数据交换。

这时可以先复制tb_test的表到tb_test_copy1,读取 tb_test1 的数据来更新
tb_test ,就可以达到字段交换数值。

UPDATE tb_test AS dest
JOIN tb_test_copy1 AS src
    ON dest.day = src.day
    AND dest.pid_system_code = src.pid_system_code
SET 
    dest.discharge_energy_start = src.charge_energy_start,
    dest.discharge_energy_end = src.charge_energy_end,
    dest.charge_energy_start = src.discharge_energy_start,
    dest.charge_energy_end = src.discharge_energy_end
WHERE dest.day = '2024-08-08'
  AND dest.pid_system_code REGEXP '^1048\\.E[0-9]+\\.S[0-9]+\\.IEM$';

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。更多免费资源在http://www.gitweixin.com/?p=2627

发表评论

邮箱地址不会被公开。 必填项已用*标注