2011-03-15 72 views
5

này hoạt động trong một bảng nơi doc_id là chìa khóa chính:MySQL Cập nhật Lỗi 1093

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

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

Nhưng khi tôi đang sử dụng chọn cùng một truy vấn để thiết lập một lĩnh vực trong bảng, nó báo cáo các lỗi sau:

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 

Tôi không thể hiểu tham chiếu bảng mục tiêu nào đang nói đến. Ai đó có thể giải thích?

Trả lời

10

Hạn chế này được diễn tả trong MySQL manual:

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

Là một khắc phục, bạn có thể quấn phụ truy vấn trong một sub-query và tránh điều đó lỗi:

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

mặc dù nó làm cho tôi thắc mắc, liệu hạn chế đó có phải là để bảo vệ bạn khỏi một cái gì đó mà cách giải quyết cho hay đó là một vấn đề kỹ thuật? – chustar

1

Bạn không thể sử dụng bảng bạn đang cập nhật trong truy vấn con trong mệnh đề từ. Hãy thử tham gia hoặc truy vấn con kép :)

1

Tôi nghĩ rằng đó có thể là do bạn đang đọc và viết từ cùng một bảng. Đây có thể là cách ngăn chặn bằng văn bản vì bản cập nhật của bạn có thể ảnh hưởng đến dữ liệu đang được đọc.

Bạn có thể cần phân tách truy vấn phụ thành sử dụng bảng ảo trung gian.

Các vấn đề liên quan