Oltre alla spiegazione di @zaratustra, la tua unione sta anche tentando di impostare il fn
e ln
allo stesso name
valore in modo che non dia il risultato desiderato anche se ha funzionato. E non puoi usare fn
o ln
nel using
clausola mentre stai cercando di aggiornarli.
Se il tuo name_test
la tabella aveva una colonna chiave primaria (o almeno univoca), quindi potresti includerla nell'unione, ma saresti comunque in grado di aggiornare correttamente solo il fn
o ln
valore in un passaggio.
Non sono sicuro del motivo per cui non stai facendo un semplice aggiornamento:
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