MySQL 更新错误 1093

Posted

技术标签:

【中文标题】MySQL 更新错误 1093【英文标题】:MySQL Update Error 1093 【发布时间】:2011-07-16 01:15:45 【问题描述】:

这适用于doc_id 是主键的表:

select count(*)+1 from doctor where 
exp > (select exp from doctor where doc_id='001');

+------------+
| count(*)+1 |
+------------+
|          2 |
+------------+

但是当我使用相同的选择查询在表中设置字段时,它会报告以下错误:

update doctor set rank=
(  select count(*)+1 from doctor where 
   exp > (select exp from doctor where doc_id='001')
) where doc_id='001';

ERROR 1093 (HY000): You can't specify target table 'doctor' for update 
in FROM clause

我不明白它在说哪个目标表引用。谁能解释一下?

【问题讨论】:

【参考方案1】:

您不能在 from 子句的子查询中使用正在更新的表。尝试连接或双子查询:)

【讨论】:

【参考方案2】:

我认为这可能是因为您在同一张桌子上读写。这可能是一种阻止写入的预防方法,因为您的更新可能会影响正在读取的数据。

您可能需要将子查询分离为使用中间虚拟表。

【讨论】:

【参考方案3】:

此限制记录在mysql manual:

目前,您无法在子查询中更新表并从同一个表中进行选择。

作为一种解决方法,您可以将子查询包装在另一个子查询中并避免该错误:

update doctor set rank=
(select rank from (  select count(*)+1 as rank from doctor where 
   exp > (select exp from doctor where doc_id='001')
) as sub_query) where doc_id='001';

【讨论】:

虽然这让我想知道,该限制是否应该保护您免受解决方法所揭示的某些事情的影响,还是技术问题?

以上是关于MySQL 更新错误 1093的主要内容,如果未能解决你的问题,请参考以下文章

MySql 错误 1093 尝试使用两个数据库和两个表进行更新

无法运行查询给出 mySQL 错误 #1093 - 您无法在 FROM 子句中指定目标表“成员”进行更新 [重复]

Mysql 错误:1093 - 无法在 FROM 子句中指定要更新的目标表

MySQL 错误 1093 - 无法在 FROM 子句中指定要更新的目标表(两个连接)

MySQL错误1093 - 无法在FROM子句中指定更新的目标表

MySQL错误1093 - 无法在FROM子句中指定更新的目标表