DBAtlas · 数据库运维图谱

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 = ...;

在 DBAtlas 中打开 →

同一数据库的其他条目