克服 MySQL 错误 1093:“无法在 FROM 子句中指定更新目标表”
遇到 MySQL 错误 1093 时,这一点很重要了解根本问题。当尝试修改查询的 FROM 子句中引用的表时,会发生此错误。
根本原因
MySQL 不允许同时修改表并用在 UPDATE 或 DELETE 语句的 FROM 子句中。此限制是由于两个操作访问同一个表会产生歧义。
解决方案 1:使用子查询
一种解决方法是嵌入 SELECT将损坏的条目标识为 UPDATE 或 DELETE 的 FROM 子句中的子查询的语句语句:
UPDATE story_category SET category_id = NULL WHERE category_id NOT IN ( SELECT DISTINCT category.id FROM category INNER JOIN story_category ON category_id=category.id );
解决方案 2:自连接表
或者,您可以自连接表来为同一个表创建单独的别名,从而允许您可以在引用另一个别名的同时修改其中一个别名。例如:
UPDATE story_category AS updated INNER JOIN story_category AS original ON updated.category_id = original.category_id SET updated.category_id = NULL WHERE original.category_id NOT IN ( SELECT DISTINCT category.id FROM category INNER JOIN story_category ON category_id=category.id );
避免再次发生
删除损坏的条目后,请考虑对 Story_category 表实施约束,以防止将来出现无效条目:
ALTER TABLE story_category ADD FOREIGN KEY (category_id) REFERENCES category(id);
以上是如何解决 MySQL 错误 1093:'无法在 FROM 子句中指定更新目标表”?的详细内容。更多信息请关注PHP中文网其他相关文章!