2009-08-04 15 views
5

Ben formunun, MySQL 5.0, bir güncelleme yapmaya çalışıyorum:MySQL 1443: ne anlama geliyor?

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

MySQL dokümanlar listesi bu hata, ancak (her zamanki gibi) don:

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

MySQL beni anlatıyor Ne anlama geldiğini söyleme. Benim için biraz ışık tutabilir mi? Yalnızca alt sorgudaki görünümü referans alıyorum ve yalnızca ana sorgudaki tabloya başvuru yapıyorum ve bunların neden güncelleştirmeyi önleyeceğini bilmiyorum. Google ile bulduğum tek şey, tetikleyicilerle ilgili MySQL hata db'deki bir hatadır, ancak (AFAIK) db'mde hiç tetikleyici yoktur.

+3

"Myview" her yerde "mytable" başvurusu yapar mı? –

cevap

7

Ben görünümü myview masanın Tablom dayalı olmalıdır düşünüyorum, bu yüzden MyField değişiklikler yapar gibi yasadışı bir güncelleme için yapar bu nedenle görünümünde ne olduğunu takip kaybeder ve o.

Görüşümün tanımına bakmanızı öneriyorum, böylece sorguya başvurmadan yazabilirsiniz. Öyleyse sen onu halledebilirsin. Alternatif olarak, ids listesini geçici bir tabloya dökün ve bunu alt sorgunuz için kullanın.

Rob

+0

"kimlik listesinin listesini geçici bir tabloya dök" -> işte bu benim sona erdi. (My) SQL'de, mantıksal olarak doğru olan bir sorgu yazdığımda, RDBMS ihtiyaç duyulduğunda zamansal oluşturmayı ele aldı (EXPLAIN öyle diyor!), Bu yüzden MySQL * 'nin * diyemeyeceği bir şey olmadı. Bunu yapmak için geçici bir tablo oluşturmam gerekecek çünkü (daha çok kafa karıştırıcı bir şekilde). Bahşiş için teşekkürler. – Ken