Mysql中如何解決You can't specify target table '表名' for update in FROM clause報錯
阿新 • • 發佈:2021-07-25
我們在MySQL中編寫SQL語句時,可能會遇到如下錯誤:
[Err] 1093 - You can't specify target table '表名' for update in FROM clause
問題原因
例如下面這個SQL,其在執行時就會出現以上報錯:
UPDATE users
SET sex = 1
WHERE id IN (
SELECT id FROM users
WHERE realname = "小白" AND id > 2);
為什麼會出現這個錯誤呢?這是因為在MySQL使用時,在同一條SQL語句中,不允許先SELECT出同一個表的某些值,再對該表進行UPDATE操作。
解決辦法
方法一
為解決上面的問題,我們可以在SELECT時多巢狀一層子查詢,即把SELECT出來的結果作為中間表再SELECT一次,修改後的SQL如下:
UPDATE users
SET sex = 1
WHERE id IN (
SELECT t.id FROM (
SELECT id FROM users
WHERE realname = "小白" AND id > 2) t);
方法二
我們還可以建立一個新的臨時表,然後根據臨時表來UPDATE主表中的資料,最後再把臨時表刪除即可。
作者:wintest 出處:https://www.cnblogs.com/wintest 本文版權歸作者和部落格園共有,歡迎轉載,但必須在文章頁面明顯位置給出原文連結,並保留此段宣告,否則保留追究法律責任的權利。CREATE TABLE user_tmp AS SELECT id FROM users WHERE realname = "小白" AND id > 2; UPDATE users SET sex = 1 WHERE id IN (SELECT id FROM user_tmp); DROP TABLE user_tmp;