5

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

どのターゲット テーブル参照について話しているのか理解できません。誰か説明できますか?

4

3 に答える 3

10

この制限は、MySQL のマニュアルに記載されています。

現在、サブクエリでテーブルを更新して同じテーブルから選択することはできません。

回避策として、サブクエリを別のサブクエリでラップして、そのエラーを回避できます。

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';
于 2011-03-15T19:46:01.140 に答える
1

from 句のサブクエリで更新中のテーブルを使用することはできません。結合または二重サブクエリを試してください:)

于 2011-03-15T19:00:35.503 に答える
1

同じテーブルから読み書きしているためだと思います。これは、更新が読み取られるデータに影響を与える可能性があるため、書き込みをブロックする予防的な方法である可能性があります。

サブクエリを分離して、中間仮想テーブルを使用する必要がある場合があります。

于 2011-03-15T19:03:15.010 に答える