Mysql: Table 'name' is specified twice, both as a target for 'UPDATE' and as a separate source for data

Tags: 

Il problema in oggetto lo abbiamo se cerchiamo di fare una query di questo tipo:

UPDATE MYTABLE SET COL=COL+1 WHERE ID IN (SELECT ID FROM MYTABLE WHERE OTHERCOL=0)

In pratica stiamo cercando di fare una query di update (o di delete), selezionando le righe tramite una query di select sulla stessa tabella. La cosa potrebbe essere perfettamente lecita (almeno se la query di select non si basa su colonne modificate dalla query di update), ma MYSQL ce la blocca comunque.

E' possibile aggirare il controllo di mysql cammuffando la query di select con una ulteriore subquery:

UPDATE MYTABLE SET COL=COL+1 WHERE ID IN (SELECT * FROM (SELECT ID FROM MYTABLE WHERE OTHERCOL=0) _alias)

1 Comment

Aggiungi un commento