2

我有一个表'员工',我正在尝试将一些属性(例如薪水)设置为与表中的其他值相同的值。我对这个错误的理解是,可以通过以下解决方法来避免它,使用临时表:

UPDATE employees
SET salary=(SELECT salary FROM (SELECT * FROM employees WHERE employee_id= '123') AS t1)
WHERE employee_id='456';

但是,当我尝试此操作时,我仍然收到相同的错误代码(“无法在 FROM 子句中指定目标表 'employees' 进行更新”)。这里还有其他问题吗?

4

1 回答 1

2

问题是 mysql 5.7 中的功能更改,滚动到最后

优化器现在以一致的方式处理 FROM 子句中的派生表和视图,以更好地避免不必要的实现,并允许使用产生更有效执行计划的下推条件。但是,对于修改表的 DELETE 或 UPDATE 等语句,对先前具体化的派生表使用合并策略可能会导致 ER_UPDATE_TABLE_USED 错误:

使用 JOIN 或强制 otimizer 像以前的版本一样运行:

SET optimizer_switch = 'derived_merge=off';
于 2015-11-16T14:38:01.607 回答