场景:想要将receiveTime的值赋给create_time,此时涉及到同表“自更新”的操作
- 错误示例
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
含义:不能在同一表中查询的数据作为同一表的更新数据。
- 解决的方法
借助一个虚拟的中间表,将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,此时涉及到同表“自更新”的操作