克服 MySQL 错误 1093:更新 FROM 子句中指定的表
尝试更新也在其中使用的表时出现 MySQL 错误 1093同一查询的 FROM 子句。要解决此错误,请考虑以下方法:
将表连接到自身
如果可行,请使用适当的选择标准将表连接到自身。这使 MySQL 能够将表视为单独的实体,并允许进行破坏性修改:
UPDATE tbl AS a INNER JOIN tbl AS b ON .... SET a.col = b.col
在 FROM 子句中更深地嵌套子查询
作为替代方案,嵌套子查询深入FROM子句创建隐式临时表:
UPDATE tbl SET col = ( SELECT ... FROM (SELECT.... FROM) AS x);
但是,这个方法效率较低,在某些版本中 MySQL 的查询优化器可能无法正确优化。
禁用查询优化器
在 MySQL 5.7.6 及更高版本中,优化器可能会防止子查询策略。要暂时禁用优化,请设置 optimizationr_switch 变量:
SET optimizer_switch = 'derived_merge=off';
示例删除查询
要解决问题中提供的特定查询,请将 Story_category 表加入到类别表来识别和删除损坏的条目:
DELETE t1 FROM story_category AS t1 INNER JOIN category AS t2 ON t1.category_id = t2.id WHERE t2.id IS NULL;
总之,通过使用通过这些技术,您可以克服“无法在 FROM 子句中指定要更新的目标表”错误并对数据库表执行必要的修改。
以上是如何修复 MySQL 错误 1093:'无法在 FROM 子句中指定要更新的目标表”?的详细内容。更多信息请关注PHP中文网其他相关文章!