MySQL 错误 1093:理解并克服限制
在 MySQL 中,尝试修改也在 FROM 子句中引用的表相同的查询可能会导致错误:“您无法在 FROM 子句中指定用于更新的目标表 'table_name'。”此限制是由于 MySQL 无法直接执行此类操作。
要解决此问题,可以考虑以下几种方法:
将表连接到自身
一种选择是使用适当的选择标准将表与其自身连接起来,从 MySQL 的角度创建表的两个不同实例。这允许在一个实例上执行破坏性操作,同时保持另一个实例不变。
在 FROM 子句中嵌套子查询
另一种解决方法是嵌套生成目标的子查询更深层次的 FROM 子句中要删除的行。这会根据子查询创建一个隐式临时表,MySQL 将其识别为与目标表不同的实体。但是,这种方法可能会影响性能。
禁用优化器优化(MySQL 5.7.6 及更高版本)
从 MySQL 5.7.6 开始,优化器可能会优化FROM 子句中的子查询,导致错误持续存在。要解决此问题,请使用 Optimizer_switch 变量禁用优化:
SET optimizer_switch = 'derived_merge=off';
请注意,建议将其作为短期解决方案或用于小型一次性任务,因为它可能会对整体查询性能产生负面影响。
结论
错误“您无法指定目标表 'table_name' update in FROM 子句”源于 MySQL 在修改也在 FROM 子句中使用的表时的限制。通过采用上述方法,开发人员可以克服此限制并对其数据执行所需的操作。
以上是如何解决 MySQL 错误 1093:'您无法在 FROM 子句中指定用于更新的目标表 'table_name'”?的详细内容。更多信息请关注PHP中文网其他相关文章!