SQL 服务器:使用来自另一个 table 的记录更新 table
SQL Server : update table using records from another table
我在 SQL Server 2012 数据库中有 2 tables employee
和 employee_history
。 employee
table 包含所有员工的当前信息,employee_history
table 跟踪每个员工的详细信息发生的所有更改。
我的要求是用 employee_history
table.
中每位员工的最新记录更新 employee
table 中的每条记录
例如:
employee
table:
employee_history
table:
employee
table 从 employee_history
table 更新后应该是:
请注意:因为这只是一个示例,所以我只添加了最少的信息。但是,employee
和 employee_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
使用 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
我在 SQL Server 2012 数据库中有 2 tables employee
和 employee_history
。 employee
table 包含所有员工的当前信息,employee_history
table 跟踪每个员工的详细信息发生的所有更改。
我的要求是用 employee_history
table.
employee
table 中的每条记录
例如:
employee
table:
employee_history
table:
employee
table 从 employee_history
table 更新后应该是:
请注意:因为这只是一个示例,所以我只添加了最少的信息。但是,employee
和 employee_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
使用 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