首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL UPDATE 子查詢報錯 1093 解決方案:JOIN 更新與多表更新技巧

     編輯:MySQL 綜合教學

MySQL UPDATE 子查詢報錯 1093 解決方案:JOIN 更新與多表更新技巧

問題現象

UPDATE test.tb_vobile a SET a.name = '111' 
WHERE a.id = (SELECT MAX(id) FROM test.tb_vobile);

報錯:Error 1093: You can't specify target table 'a' for update in FROM clause

原因

MySQL 不允許 UPDATE 目標表同時出現在子查詢的 FROM 子句中。

解決方案

方法一:JOIN 更新(推薦)

UPDATE test.tb_vobile a
JOIN (SELECT MAX(id) AS id FROM test.tb_vobile) b ON a.id = b.id
SET a.name = '123';

方法二:多表更新語法

UPDATE test.tb_vobile a,
       (SELECT MAX(id) AS id FROM test.tb_vobile) b
SET a.name = '321'
WHERE a.id = b.id;

核心規律總結

  1. 更新表不能直接在 SET/WHERE 子查詢中引用自身。
  2. MySQL 支持多表聯合更新(SQL Server 不支持):
    UPDATE ta a, tb b SET a.bid=b.id, b.aid=a.id;
  3. UPDATE 後可跟任意查詢(等效 FROM),配合 JOIN 或逗號語法繞過 1093 限制。

實務中推薦使用 JOIN 寫法,語義清晰、兼容性好、易維護。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved