2011-03-15 2 views
5
doc_id 이것은 기본 키가 doc_id 인 테이블에서 작동합니다.

MySQL 업데이트 오류 1093

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

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

그러나 테이블의 필드를 설정하기 위해 동일한 select 쿼리를 사용하면 다음 오류가보고됩니다.

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 

내가 말하는 목표 테이블 참조를 이해할 수 없습니다. 누군가 설명 할 수 있습니까?

답변

10

이 제한은 MySQL manual에 설명되어 있습니다 :

해결 방법으로

Currently, you cannot update a table and select from the same table in a subquery.

, 다른 하위 쿼리의 하위 쿼리를 포장하고 오류 방지 할 수 있습니다 : 그것은 나를 수 있지만

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'; 
+3

을 궁금해, 해결 방법이 드러내는 것이나 기술적 인 문제에서 당신을 보호하기위한 제한입니까? – chustar

1

업데이트중인 테이블을 from 절의 하위 쿼리에서 사용할 수 없습니다. 조인 또는 이중 하위 쿼리를 시도하십시오.

1

같은 테이블에서 읽고 쓰고 있기 때문일 수 있습니다. 이는 업데이트가 읽는 데이터에 영향을 줄 수 있으므로 쓰기를 차단하는 예방 수단이 될 수 있습니다.

중간 가상 테이블을 사용하여 하위 쿼리를 분리해야 할 수도 있습니다.