1. 程式人生 > >MySQL update語句巢狀select語句同一張表

MySQL update語句巢狀select語句同一張表

今天在更新一條記錄時,突然發現自己竟然連update時巢狀使用select都不會用。摸索著寫了一條,還報錯了。類似如下

CREATE TABLE t3(
num1 SMALLINT,
num2 SMALLINT
);
INSERT INTO t3 VALUES(20,10),(30,40);
num1 num2
20 10
30 40
UPDATE t3 SET num1=(
SELECT num2 FROM t3 WHERE num1=30
) WHERE num2=10

報錯如下,大意是不能在FROM字句中使用要更新的目標表’t3’

[Err] 1093
- You can't specify target table 't3' for update in FROM clause

解決辦法:(來源:http://blog.csdn.net/afeiqiang/article/details/8589535)
既然MySQL是通過臨時表來實現FROM子句裡面的巢狀查詢,那麼把巢狀查詢裝進另外一個巢狀查詢裡,可使FROM子句查詢和儲存都是在臨時表裡進行,然後間接地在外圍查詢被引用。
以下語句執行正確

UPDATE t3 SET num1=(
SELECT num2 FROM
(SELECT * FROM t3 WHERE num1=30) temp
) WHERE
num2=10