Förutom förklaringen från @zaratustra, försöker din sammanslagning också ställa in fn
och ln
till samma name
värde så att det inte skulle ge det resultat du vill ha även om det fungerade. Och du kan inte använda fn
eller ln
i using
klausul när du försöker uppdatera dem.
Om ditt name_test
Tabellen hade en primärnyckel (eller åtminstone unik) kolumn, då kunde du inkludera den i sammanslagningen, men du skulle fortfarande bara kunna uppdatera antingen fn
korrekt. eller ln
värde i ett pass.
Jag är inte säker på varför du inte gör en enkel uppdatering:
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