背景:同一表中,部分记录的创建时间晚于更新时间。所以针对创建时间晚于更新时间的记录,交换此两字段的值。否则保持原样。
- 第一次尝试
使用命令UPDATE dcdict SET updateTime=IF(updateTime>createTime,updateTime,createTime), createTime=IF(updateTime>createTime,createTime,updateTime);
。这样导致创建时间晚于更新时间的记录最终创建时间和更新时间都是创建时间。
因为update首先更新第一个字段值,即updateTime,当创建时间晚于更新时间时,updateTime值变为创建时间。然后更新第二字段值createTime,此时更新时间和创建时间已经相等了,故创建时间无变化。 - 解决方案
首先复制一份相同表;
使用命令UPDATE dcdict a,dcdict_copy b SET a.updateTime=IF(b.updateTime>b.createTime,b.updateTime,b.createTime), a.createTime=IF(b.updateTime>b.createTime,b.createTime,b.updateTime) WHERE a.id=b.id;