Além da explicação do @zaratustra, sua mesclagem também está tentando definir o
fn
e ln
para o mesmo name
valor para que não desse o resultado que você deseja, mesmo que funcione. E você não pode usar fn
ou ln
no using
cláusula enquanto você está tentando atualizá-los. Se o seu
name_test
table tivesse uma coluna de chave primária (ou pelo menos exclusiva), então você poderia incluí-la na mesclagem, mas ainda seria capaz de atualizar corretamente o fn
ou ln
valor em uma passagem. Não sei por que você não está fazendo uma atualização simples:
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