用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$';