場景:想要將receiveTime的值賦給create_time,此時涉及到同表“自更新”的操作

image.png
- 錯誤示例
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
含義:不能在同一表中查詢的數(shù)據(jù)作為同一表的更新數(shù)據(jù)。
- 解決的方法
借助一個虛擬的中間表,將receiveTime賦值給create_time
UPDATE order_flow SET create_time =
(SELECT b.receiveTime FROM
( SELECT a.receiveTime FROM order_flow a WHERE a.flowId = 1) -- 此處相當(dāng)于一個虛擬的表,簡稱b
b)
WHERE flowId = 1;
利用嵌套兩層select語句的方式實現(xiàn)了將receiveTime的值賦給create_time,此時涉及到同表“自更新”的操作