Ik denk niet dat je de lus nodig hebt. Ik neem aan dat je id's primaire sleutels zijn en dat het niet je bedoeling was om crank meerdere keren te herhalen in je voorbeeld.
Zou zoiets werken?
Bewerken volgens de opmerking van Raj A. Hiermee worden alleen rijen bijgewerkt waarin een van de andere velden is gewijzigd. Merk op dat hiermee geen rijen worden bijgewerkt waarvan de ene NULL is en de andere niet NULL.
MERGE INTO final T
USING ( SELECT id, score, crank, urank FROM test ) S
ON ( S.vid = T.id AND
( S.crank != T.crank OR S.score != T.score OR S.urank != T.urank ))
WHEN MATCHED SET crank = S.crank, score = S.score,
crank = S.crank, urank = S.urank
WHEN NOT MATCHED THEN INSERT
[... not sure what you want to do in this case ...]