MySQL 5.7 错误 (1093: You can't specify target table ___ for update in FROM 子句) - 通常的解决方案不起作用
Posted
技术标签:
【中文标题】MySQL 5.7 错误 (1093: You can\'t specify target table ___ for update in FROM 子句) - 通常的解决方案不起作用【英文标题】:MySQL 5.7 error (1093: You can't specify target table ___ for update in FROM clause) - usual solution not workingMySQL 5.7 错误 (1093: You can't specify target table ___ for update in FROM 子句) - 通常的解决方案不起作用 【发布时间】:2016-02-17 04:36:57 【问题描述】:我有一个表“员工”,我正在尝试将一些属性(例如薪水)设置为与表中的其他值相同的值。我对这个错误的理解是,可以通过以下解决方法来避免它,使用临时表:
UPDATE employees
SET salary=(SELECT salary FROM (SELECT * FROM employees WHERE employee_id= '123') AS t1)
WHERE employee_id='456';
但是,当我尝试此操作时,我仍然收到相同的错误代码(“无法在 FROM 子句中指定目标表 'employees' 进行更新”)。这里还有其他问题吗?
【问题讨论】:
它正在处理sqlfiddle 如果它应该在 mysql 上运行,是否有某种原因无法在 MySQL 上运行......?我不是很熟悉。 因为虽然它不是在同一个表上连接的更新,但它可能需要不同的别名? 服务器版本 5.7.9,工作台版本 6.3.5 【参考方案1】:问题是mysql 5.7中的functional change,滚动到最后
优化器现在处理 FROM 子句中的派生表和视图 以一致的方式更好地避免不必要的物化和 能够使用产生更高效率的下推条件 执行计划。但是,对于 DELETE 或 UPDATE 等语句, 修改表,使用派生表的合并策略 以前被具体化可能会导致 ER_UPDATE_TABLE_USED 错误:
使用 JOIN 或强制 otimizer 的行为与以前版本中的行为类似:
SET optimizer_switch = 'derived_merge=off';
【讨论】:
要清楚,该行会超出查询,对吗?根据该文档,它似乎绝对应该使用它,但它仍然没有.. @filaments 在运行查询之前单独运行。Doesnt work 意味着什么? 仍然收到相同的错误消息(“您无法在 FROM 子句中指定目标表 'employees' 进行更新”)。我在查询之前单独运行它。我想我可以使用 join 并完成它,但我希望我也能弄清楚这部分。 @filaments 奇怪,尝试在外部 SELECT 之后添加一个 DISTINCT 以强制派生表。 仍然是相同的错误代码。我可能生活在一些奇怪的平行 MySQL 世界中。以上是关于MySQL 5.7 错误 (1093: You can't specify target table ___ for update in FROM 子句) - 通常的解决方案不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Mac 安装 MySQL 5.7 后登入后无法执行命令You must reset your password using ALTER USER statement before executing
mysql 5.7密码报错 ERROR 1820 (HY000): You must reset your password using ALTER USER statement before exe
[Err] 1093 - You can't specify target table 'master_data' for update in FROM clause
mysql 5.7 版本 You must reset your password using ALTER USER statement before executing this statement
Mac 安装 MySQL 5.7 后登入后无法执行命令You must reset your password using ALTER USER statement before executing