UPDATE tobeupdated
INNER JOIN original ON (tobeupdated.value = original.value)
SET tobeupdated.id = original.id
Dovrebbe farlo, e in realtà sta facendo esattamente quello che è il tuo. Tuttavia, preferisco la sintassi "JOIN" per i join piuttosto che più condizioni "WHERE", penso che sia più facile da leggere
Per quanto riguarda la corsa lenta, quanto sono grandi i tavoli? Dovresti avere indici su tobeupdated.value
e original.value
EDIT:possiamo anche semplificare la query
UPDATE tobeupdated
INNER JOIN original USING (value)
SET tobeupdated.id = original.id
USING
è un'abbreviazione quando entrambe le tabelle di un join hanno una key
identica come id
. cioè un equi-join - http://en.wikipedia.org/ wiki/Join_(SQL)#Equi-join