我在SQL Server 2012数据库中有2个表employee
和employee_history
。 employee
表包含所有员工的当前信息,employee_history
表跟踪每个员工的详细信息所发生的所有更改。
我的要求是使用employee
表中每位员工的最新记录更新employee_history
表中的每条记录。
例如:
employee
表:
employee_history
表:
employee
表更新后的 employee_history
表应为:
请注意:因为这只是一个例子,我只添加了最少的信息。但是,employee
和employee_history
表都有很多其他列。并且每个表中有一些列不存在于另一个表中。我不应该更新这些列。
请告诉我最简单的方法是什么?
答案 0 :(得分:2)
使用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
答案 1 :(得分:0)
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