Oprócz wyjaśnienia od @zaratustra, twoje scalenie również próbuje ustawić fn i ln do tej samej name wartość, aby nie dał pożądanego rezultatu, nawet jeśli zadziałało. I nie możesz użyć fn lub ln w using klauzuli, gdy próbujesz je zaktualizować.
Jeśli Twój name_test tabela miała kolumnę klucza podstawowego (lub przynajmniej unikatową), więc można ją uwzględnić w scaleniu, ale nadal można poprawnie zaktualizować tylko fn lub ln wartość w jednym przejściu.
Nie jestem pewien, dlaczego nie wykonujesz prostej aktualizacji:
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