2009-08-04 14 views
5

:MySQLのドキュメントは、このエラーをリストMySQL 1443:それはどういう意味ですか?私は、フォームのは、MySQL 5.0で、更新をやろうとしている

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

が、(いつものように)ドン:

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

MySQLは私に語りましたそれが何を意味するかは分かりません。誰も私のためにこれについていくつかの光を当てることができますか?サブクエリ内のビューのみを参照し、メインクエリのテーブルのみを参照するため、これらが更新を妨げる原因はわかりません。私がGoogleで見つけた唯一のことは、トリガーに関連するMySQLバグデータベースのバグですが、(AFAIK)データベースにはトリガーがありません。

+3

"myview"はどこでも "mytable"を参照していますか? –

答えて

7

私は、ビューMYVIEWを考えるそれはmyFieldでへの変更を行うよう、それはビューで何のトラックを失い、したがって、違法な更新になりように、テーブルmytableはに基づいていなければなりません。

myviewの定義を参照することをお勧めします。これを参照せずにクエリを書くことができます。その後、あなたはそれを解決することができるかもしれません。

また、idsのリストを一時テーブルにダンプし、それをサブクエリに使用します。

ロブ

+0

"idsのリストを一時テーブルにダンプする" - >これが私のやり方です。 (私の)SQLでは、論理的に正しいクエリを書くたびに、RDBMSは必要に応じて一時的なものを作成することを処理していました(EXPLAINによれば!)ので、MySQL *私は一時的なテーブルを作成する必要があるので、これをやろうとしています」(はるかに混乱する言葉でも)。先端に感謝します。 – Ken