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 子句中指定要更新的目标表(两个连接)