En plus de l'explication de @zaratustra, votre fusion tente également de définir le fn
et ln
au même name
valeur afin qu'il ne donne pas le résultat que vous voulez, même si cela a fonctionné. Et vous ne pouvez pas utiliser fn
ou ln
dans le using
clause pendant que vous essayez de les mettre à jour.
Si votre name_test
table avait une colonne de clé primaire (ou au moins unique), vous pouvez l'inclure dans la fusion, mais vous ne pourrez toujours mettre à jour correctement que le fn
ou ln
valeur en un seul passage.
Je ne sais pas pourquoi vous ne faites pas une simple mise à jour :
update name_test nt
set fn = (select td.name from temp_distinct td where td.fn = nt.fn),
ln = (select td.name from temp_distinct td where td.fn = nt.ln);
8 rows updated.
select * from name_test;
FN LN
----- -----
Mich Steve
Mich Phil
Mark Dave
Mich Phil
Mich Dave
Phil John
Steve Dean
Steve Phil