1093: You can't specify target table 'x' for update in FROM clause(不能在 FROM 子句中指定要更新的目标表 'x')
MySQL含义
在 UPDATE 或 DELETE 语句中,正在更新/删除的表本身不能直接在子查询(FROM 中)中用作源。MySQL 不允许同一张表以这种方式同时作为目标和源。
原因
子查询直接读取同一目标表,如 UPDATE my_table ... WHERE id IN (SELECT ... FROM my_table ...);DELETE 中的子查询引用了同一张表。
解决方法
将子查询包装在派生表中并赋予新的别名,使 MySQL 将其视为单独的副本:UPDATE my_table SET c = 1 WHERE id IN (SELECT id FROM (SELECT id FROM my_table WHERE condition) AS t); 或者改写为自连接:UPDATE my_table a JOIN my_table b ON ... SET a.c = ...;
同一数据库的其他条目
- 1050Table already exists(表已存在)
- 1051Unknown table 'x'(未知表 'x')
- 1091Can't DROP 'x'; check that column/key exists(无法 DROP 'x';请检查该列/键是否存在)
- 1305PROCEDURE does not exist(PROCEDURE 不存在)
- 1227Access denied; you need (at least one of) the PRIVILEGE(访问被拒绝;需要(至少一项)PRIVILEGE 权限)
- 3730Cannot drop table referenced by a foreign key constraint(无法删除被外键约束引用的表)
- 2013Lost connection to MySQL server during query(查询期间与 MySQL 服务器的连接丢失)