SQL Server:根据指定ID批量更新同员工后续薪资
解决指定ID对应员工后续薪资记录的更新问题
原始表结构与数据
假设表名为salary_records,数据如下:
Id EmployeeId Salary Date 1 11 100 2022-12-01 2 11 111 2023-01-01 3 11 NULL 2023-02-01 4 22 200 2023-02-01 5 22 222 2023-03-01 6 22 NULL 2023-04-01
需求说明
输入ID列表(2, 5),需找到与这些ID对应行同EmployeeId且Date大于对应行Date的记录,将它们的Salary设置为对应行的Salary。
解决方案
使用UPDATE + JOIN的方式实现,这种方式比子查询更直观高效,适合新手理解:
MySQL 语法
UPDATE salary_records t1 JOIN ( -- 先筛选出目标ID对应的员工、薪资和基准日期 SELECT EmployeeId, Salary, Date AS target_date FROM salary_records WHERE Id IN (2, 5) ) t2 ON t1.EmployeeId = t2.EmployeeId SET t1.Salary = t2.Salary -- 只更新日期晚于基准日期的记录 WHERE t1.Date > t2.target_date;
SQL Server 语法
如果使用SQL Server,语法略有调整:
UPDATE t1 SET t1.Salary = t2.Salary FROM salary_records t1 JOIN ( SELECT EmployeeId, Salary, Date AS target_date FROM salary_records WHERE Id IN (2, 5) ) t2 ON t1.EmployeeId = t2.EmployeeId WHERE t1.Date > t2.target_date;
执行后结果
执行上述语句后,表数据将变为预期结果:
Id EmployeeId Salary Date 1 11 100 2022-12-01 2 11 111 2023-01-01 3 11 111 2023-02-01 4 22 200 2023-02-01 5 22 222 2023-03-01 6 22 222 2023-04-01
内容的提问来源于stack exchange,提问作者VollerSterne
相关产品推荐
相关产品推荐

