我已经找到了很多关于解决方法的示例和文档,但标准示例对我不起作用。
在这个答案中,给出了一个变通方法:
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';
不知什么原因,哪里似乎打破了这一局面,有什么我明显做错了吗?
您可以使用带有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版本的优化器只是忽略了外部SELECT。作为替代方案,您可以告诉优化器不要合并派生查询:
SET optimizer_switch = 'derived_merge=off'