2009-08-04 38 views
5

Tôi đang cố gắng để làm một bản cập nhật, trong MySQL 5.0, có dạng:MySQL 1443: ý nghĩa của nó là gì?

update mytable.myfield t 
set f = 'blah' 
where t.id in (select v.id from myview v where ...); 

MySQL nói với tôi:

ErrorNr. 1443 
The definition of table 'v' prevents operation UPDATE on table 't'. 

Các MySQL danh sách tài liệu lỗi này, nhưng (như thường lệ) don không nói ý nghĩa của nó. Ai đó có thể làm sáng tỏ vấn đề này giúp tôi không? Tôi chỉ tham chiếu chế độ xem trong truy vấn con và tôi chỉ tham chiếu bảng trong truy vấn chính và tôi không biết tại sao những điều này sẽ ngăn cập nhật. Điều duy nhất tôi tìm thấy với google là một lỗi trong db lỗi của MySQL liên quan đến trình kích hoạt, nhưng (AFAIK) không có trình kích hoạt trong db của tôi.

+3

Tham chiếu "myview" "mytable" có ở đâu không? –

Trả lời

7

Tôi nghĩ rằng quan điểm myview phải căn cứ vào bảng mytable, vì vậy mà vì nó làm thay đổi myfield, nó sẽ mất theo dõi những gì là trong giao diện và do đó làm cho một bản cập nhật bất hợp pháp.

Tôi khuyên bạn nên xem định nghĩa của myview để bạn có thể viết truy vấn của mình mà không cần tham chiếu. Sau đó, bạn có thể làm việc nó ra.

Hoặc, chuyển danh sách id thành bảng tạm thời và sử dụng nó cho truy vấn phụ của bạn.

Rob

+0

"đổ danh sách các id vào bảng tạm thời" -> đó là những gì tôi đã kết thúc. Trong (My) SQL, bất cứ khi nào tôi viết một truy vấn đúng về mặt logic, RDBMS đã xử lý việc tạo ra các thời gian cần thiết (EXPLAIN nói như vậy!), Vì vậy nó không xảy ra với tôi rằng MySQL * có thể * từng nói "Tôi không sẽ làm điều đó bởi vì nó sẽ yêu cầu tôi tạo ra một bảng tạm thời "(mặc dù trong nhiều cách khó hiểu hơn). Cảm ơn vì tiền hỗ trợ. – Ken

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