Mysql中如何解決You can't specify target table '表名' for update in FROM clause報錯

我們在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主表中的數據,最後再把臨時表刪除即可。

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;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章