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