【问题标题】:MySQL Update Error 1093MySQL 更新错误 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

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

【问题讨论】:

    标签: mysql sql sql-update mysql-error-1093


    【解决方案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';
        

        【讨论】:

        • 虽然这让我想知道,该限制是否应该保护您免受解决方法所揭示的某些事情的影响,还是技术问题?
        猜你喜欢
        • 2014-01-26
        • 1970-01-01
        • 2016-11-16
        • 2011-05-27
        • 1970-01-01
        • 2015-07-23
        • 2013-01-17
        • 2014-07-19
        • 2018-08-10
        相关资源
        最近更新 更多