В допълнение към обяснението от @zaratustra, вашето сливане също се опитва да зададе fn
и ln
към същото name
стойност, така че да не даде резултата, който искате, дори да работи. И не можете да използвате fn
или ln
в using
клауза, докато се опитвате да ги актуализирате.
Ако вашият name_test
таблицата имаше първичен ключ (или поне уникален) колона, тогава можете да включите това в сливането, но пак ще можете да актуализирате правилно само fn
или ln
стойност с едно преминаване.
Не съм сигурен защо не правите проста актуализация:
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