我已经找到了很多有关此方法的示例和文档,但标准示例对我不起作用。
在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似乎打破了这个问题,有什么我显然做错了吗?
答案 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'