Zusätzlich zu der Erklärung von @zaratustra versucht Ihr Merge auch, den fn zu setzen und ln auf denselben name Wert, so dass es nicht das gewünschte Ergebnis liefern würde, selbst wenn es funktioniert hat. Und Sie können fn nicht verwenden oder ln im using -Klausel, während Sie versuchen, sie zu aktualisieren.
Wenn Ihr name_test Tabelle eine Primärschlüsselspalte (oder zumindest eine eindeutige) hatte, dann könnten Sie diese in die Zusammenführung einbeziehen, aber Sie könnten immer noch nur entweder den fn korrekt aktualisieren oder ln Wert in einem Durchgang.
Ich bin mir nicht sicher, warum Sie kein einfaches Update durchführen:
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