Jeg tror ikke, du har brug for løkken. Jeg går ud fra, at dine id'er er primære nøgler, og du mente ikke at gentage håndsvinget flere gange i dit eksempel.
Ville sådan noget virke?
Rediger efter Raj A's kommentar. Dette vil kun opdatere rækker, hvor et af de andre felter er ændret. Bemærk, at dette ikke vil opdatere rækker, hvor den ene er NULL og den anden ikke er 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 ...]