UPDATE tobeupdated
INNER JOIN original ON (tobeupdated.value = original.value)
SET tobeupdated.id = original.id
Det borde göra det, och det gör verkligen precis vad du gör. Jag föredrar dock 'JOIN'-syntax för joins snarare än flera 'WHERE'-villkor, jag tror att det är lättare att läsa
När det gäller att springa långsamt, hur stora är borden? Du bör ha index på tobeupdated.value och original.value
EDIT:vi kan också förenkla frågan
UPDATE tobeupdated
INNER JOIN original USING (value)
SET tobeupdated.id = original.id
USING är en stenografi när båda tabellerna i en join har en identiskt namngiven key som id . dvs en equi-join - https://en.wikipedia.org/ wiki/Join_(SQL)#Equi-join