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

Обновить

Другие вопросы по тегам