2009-08-04 16 views
5

Próbuję wykonać aktualizację, w MySQL 5.0, w postaci:MySQL 1443: co to znaczy?

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

MySQL mówi mi:

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

MySQL docs wykaz ten błąd, ale (jak zwykle) don powiedzieć co to znaczy. Czy ktoś może mi o tym powiedzieć? Jedynie odwołuję się do widoku w podzapytaniu, a odwołuję się tylko do tabeli w głównym zapytaniu i nie wiem, dlaczego uniemożliwiłoby to aktualizację. Jedyne, co znalazłem w google, to błąd w db bazie danych MySQL związany z wyzwalaczami, ale (AFAIK) w moim db nie ma żadnych wyzwalaczy.

+3

Czy "myview" odwołuje się do "mytable" w dowolnym miejscu? –

Odpowiedz

7

myślę widok myview musi opierać się na stole mojatabela tak, jak to czyni zmiany myField, traci poczucie co jest w widoku, a zatem przyczynia się do nielegalnego aktualizacji.

Polecam, patrząc na definicję mejview, dzięki czemu można napisać zapytanie bez odwoływania się do niego. Wtedy możesz być w stanie to rozpracować.

Można też zrzucić listę identyfikatorów do tabeli tymczasowej i użyć jej dla podkwerendy.

Rob

+0

"zrzuć listę identyfikatorów do tabeli tymczasowej" -> to właśnie zrobiłem. W (My) SQL, gdy piszę kwerendę, która jest logicznie poprawna, RDBMS obsłużył tworzenie tymczasowych w razie potrzeby (EXPLAIN mówi tak!), Więc nie przyszło mi do głowy, że MySQL * może * kiedykolwiek powiedzieć "Nie jestem zamierzam to zrobić, ponieważ wymagałoby to ode mnie utworzenia tymczasowego stołu "(choć w dużo bardziej mylącym słownictwie). Dzięki za wskazówkę. – Ken