mysql 中将表中某一字段值查询出来,更新到另一个字段上的SQL写法

场景:想要将receiveTime的值赋给create_time,此时涉及到同表“自更新”的操作

image.png
  1. 错误示例
update order_info set create_time = (select receiveTime from order_info where flowId = 1) where flowId = 1;

这种写法会报一个错误:You can't specify target table for update in FROM clause
含义:不能在同一表中查询的数据作为同一表的更新数据。

  1. 解决的方法
    借助一个虚拟的中间表,将receiveTime赋值给create_time
UPDATE order_flow SET create_time =
    (SELECT b.receiveTime FROM 
          ( SELECT a.receiveTime FROM order_flow a WHERE a.flowId = 1) -- 此处相当于一个虚拟的表,简称b
b) 
WHERE flowId = 1;

利用嵌套两层select语句的方式实现了将receiveTime的值赋给create_time,此时涉及到同表“自更新”的操作

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容