SQL Server: обновить таблицу, используя записи из другой таблицы
У меня 2 стола employee
а также employee_history
в базе данных SQL Server 2012. employee
Таблица содержит текущую информацию о всех сотрудниках и employee_history
Таблица отслеживает все изменения, которые произошли с деталями каждого сотрудника.
Мое требование - обновить каждую запись в employee
таблица с самой последней записью для каждого сотрудника из employee_history
Таблица.
Например:
employee
Таблица:
employee_history
Таблица:
employee
таблица после обновления от employee_history
таблица должна быть:
Обратите внимание: поскольку это только пример, я добавил только минимальную информацию. Но оба employee
а также employee_history
таблицы имеют много других столбцов. И в каждой таблице есть несколько столбцов, которых нет в другой таблице. Я не должен обновлять эти столбцы.
Подскажите пожалуйста, какой самый простой способ сделать это?
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
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