MySQL update語句巢狀select語句同一張表
阿新 • • 發佈:2019-01-01
今天在更新一條記錄時,突然發現自己竟然連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