@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