SQL 服务器:使用来自另一个 table 的记录更新 table

SQL Server : update table using records from another table

我在 SQL Server 2012 数据库中有 2 tables employeeemployee_historyemployee table 包含所有员工的当前信息,employee_history table 跟踪每个员工的详细信息发生的所有更改。

我的要求是用 employee_history table.

中每位员工的最新记录更新 employee table 中的每条记录

例如:

employee table:

employee_history table:

employee table 从 employee_history table 更新后应该是:

请注意:因为这只是一个示例,所以我只添加了最少的信息。但是,employeeemployee_history table 都有很多其他列。每个 table 中都有一些列在另一个 table 中不存在。我不应该更新这些列。

你能告诉我最简单的方法是什么吗?

update a 
   set a.Emp_first_name = b.emp_first_name,
       a.emp_last_name  = b.emp_last_name, 
       a.Emp_Phone      = b.Emp_phone, 
       a.Emp_Address    = b.Emp_address, 
       a.Emp_dept       = b.Emp_dept
from employee as a
join  ( select * 
             , row_number over (partition by emp_id order by Updated_date  desc) as rn
        from employee_history  
      ) as b 
 on b.emp_id = a.emp 
and b.rn = 1

update

使用 CTE 正确连接表。

;with hist as (
select *, row_number() over(partition by emp_id order by updated_date desc) rn
from employee_history
)
update employee
set Emp_First_Name = hist.Emp_First_Name --,more cols
from employee e
inner join hist on e.Emp_id = hist.emp_id and hist.rn = 1