Ваше решение медленное. Эффективнее обновить по 1 полю за 1 запрос обычный, без join'ов.
Или использовать вот такой вариант, он гораздо эффективнее по производительности чем Ваш:
UPDATE `table` SET `field` = CASE `id`
WHEN val1 THEN data1
WHEN val2 THEN data2
ELSE `field` END
Только обязательно не забывайте ELSE.