UPDATE tobeupdated
INNER JOIN original ON (tobeupdated.value = original.value)
SET tobeupdated.id = original.id
To powinno wystarczyć i naprawdę robi dokładnie to, czym jest twoje. Jednak wolę składnię „JOIN” dla złączeń niż wiele warunków „WHERE”, myślę, że jest łatwiejsza do odczytania
Jeśli chodzi o bieganie wolno, jak duże są stoły? Powinieneś mieć indeksy na tobeupdated.value
i original.value
EDYCJA:możemy również uprościć zapytanie
UPDATE tobeupdated
INNER JOIN original USING (value)
SET tobeupdated.id = original.id
USING
jest skrótem, gdy obie tabele złączenia mają identyczny nazwany key
takie jak id
. tj. equi-join - http://en.wikipedia.org/ wiki/Join_(SQL)#Equi-join