Ngoài lời giải thích từ @zaratustra, hợp nhất của bạn cũng đang cố gắng đặt fn và ln đến cùng một name giá trị để nó sẽ không cung cấp kết quả bạn muốn ngay cả khi nó hoạt động. Và bạn không thể sử dụng fn hoặc ln trong using khi bạn đang cố gắng cập nhật chúng.
Nếu name_test của bạn bảng có khóa chính (hoặc ít nhất là duy nhất) thì bạn có thể đưa cột đó vào hợp nhất, nhưng bạn vẫn chỉ có thể cập nhật chính xác cột fn hoặc ln giá trị trong một lần vượt qua.
Tôi không chắc tại sao bạn không cập nhật đơn giản:
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