MySQL错误:1093。无法在From子句变通方法中指定更新目标表

时间:2015-11-17 19:30:31

标签: mysql sql

我已经找到了很多有关此方法的示例和文档,但标准示例对我不起作用。

this回答中,解决方法的形式如下:

UPDATE tbl SET col = (
SELECT ... FROM (SELECT.... FROM) AS x);

我使用相同的格式但仍然得到相同的错误。这是我的询问。

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

由于某种原因,WHERE似乎打破了这个问题,有什么我显然做错了吗?

1 个答案:

答案 0 :(得分:1)

您可以使用带有JOIN的UPDATE查询,如下所示:

UPDATE
  employees e CROSS JOIN (
    SELECT salary FROM employees WHERE employee_id='100'
  ) e1
SET
  e.salary = e1.salary
WHERE
  e.employee_id='105'

使用带有内部SELECT的SELECT曾经是一种解决方法,但是较新的mysql版本的优化器只是忽略了外部选择。作为替代方案,您可以告诉优化器不要合并派生的查询:

SET optimizer_switch = 'derived_merge=off'