2009-08-04 58 views
5

我試圖做一個更新,在MySQL 5.0中,下面的形式:MySQL 1443:這是什麼意思?

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

MySQL的告訴我:

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

MySQL的文檔列表這個錯誤,但(像往常一樣)唐不說這意味着什麼。任何人都可以爲我闡明這一點嗎?我只引用子查詢中的視圖,並且只引用主查詢中的表,並且我不知道爲什麼這些會阻止更新。我在google上發現的唯一一件事是與觸發器相關的MySQL bug db中的一個錯誤,但是(AFAIK)在我的db中沒有觸發器。

+3

「myview」是否在任何地方引用「mytable」? – 2009-08-04 02:36:43

回答

7

我認爲,鑑於MyView的必須基於表MYTABLE,所以它會更改MyField的,它失去的軌道里有什麼意見,因此使一個非法的更新。

我建議看一下myview的定義,以便您可以在不引用它的情況下編寫查詢。那麼你可能可以解決它。

或者,將ID列表轉儲到臨時表並將其用於子查詢。

Rob

+0

「將ID列表轉儲到臨時表」 - >這就是我最終做的事情。在(My)SQL中,每當我編寫一個邏輯上正確的查詢時,RDBMS就會根據需要處理創建臨時對象(EXPLAIN這麼說!),所以我不會想到MySQL *會說「我不是要做到這一點,因爲它會要求我創建一個臨時表「(儘管更容易混淆)。謝謝你的提示。 – Ken 2009-08-04 17:04:06