MySql 更新 : Can't specify target table for update in FROM clause

标签 mysql sql sql-update

我正在尝试对满足特定条件的值执行更新操作。我的表 CAPD、CAMP、CAD。但是我得到了错误

Error Code: 1093. You can't specify target table 'CAPD' for update in FROM clause

UPDATE CAPD SET CAPD.Is_Active = 1
WHERE CAPD.Per_Id IN (
    SELECT CAMP.Id

    FROM CAMP 

    INNER JOIN CAPD ON (
        CAPD.Per_Id = CAMP.Id 
        AND CAPD.Is_Active = 0 
    ) 
    INNER JOIN CAD ON (
        CAD.Id = CAPD.Deploy_Id 
        AND BINARY CAD.Access_Id = "486579446F6E277-4436F6E7665727449742E2E4C-4F4C203A5020584F586F"
    ) 

    WHERE CAMP.Serial = "ABC1230071"
)

最佳答案

You cannot use the target table which you are updating inside the subquery. You need to use the JOIN in case you want to use it -- First answer by @Rahul Tripathi

你必须尝试这个查询然后你需要设置SET SQL_SAFE_UPDATES

SET SQL_SAFE_UPDATES=0;

UPDATE CAPD 
INNER JOIN CAD ON ( CAD.Id = CAPD.Deploy_Id) 

SET CAPD.Is_Active = 1

WHERE CAPD.Per_Id IN (
 SELECT CAMP.Id 
    FROM CAMP 
    WHERE CAMP.Serial = "ABC1230071"
)

AND  BINARY CAD.Access_Id = "486579446F6E277-4436F6E7665727449742E2E4C-4F4C203A5020584F586F";

SET SQL_SAFE_UPDATES=1;

关于MySql 更新 : Can't specify target table for update in FROM clause,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33564300/

相关文章:

sql - 添加带有 SQL 导入任务的标志

mysql - 通过主键更新多个 ROW

php - 加入两个表以匹配整数以获得用户名

mysql - 用于起始字符序列 mysql 5.1 的正则表达式

mysql - SQL-Server 和 MySQL 互操作性?

mysql - 建议我在 MySql 中查询计数——我没有得到正确的输出

mysql - 如何使用存储过程租用车辆

MySQL跨表更新

php - 转义 MySQL UPDATE(如果长度)

php - 如何仅更新 mysql 表中的选定字段