编写SQL查询根据DEPT表更新EMP表的Salary字段
基于DEPT表更新EMP表薪资的SQL语句
需求说明
- DEPT表:包含
dept_no、C、N字段,存储各部门**任务完成(C)和任务未完成(N)**对应的薪资标准 - EMP表:包含
dept_no、employee_no、Task_status、Salary字段,需根据员工的Task_status,匹配对应部门的DEPT表数据,更新Salary字段
通用SQL更新语句
MySQL 写法
UPDATE EMP JOIN DEPT ON EMP.dept_no = DEPT.dept_no SET EMP.Salary = CASE WHEN EMP.Task_status = 'C' THEN DEPT.C WHEN EMP.Task_status = 'N' THEN DEPT.N ELSE EMP.Salary -- 保留原薪资,避免异常状态导致数据错误 END;
SQL Server 写法
UPDATE EMP SET Salary = CASE WHEN EMP.Task_status = 'C' THEN DEPT.C WHEN EMP.Task_status = 'N' THEN DEPT.N ELSE EMP.Salary END FROM EMP INNER JOIN DEPT ON EMP.dept_no = DEPT.dept_no;
验证数据(更新前必做)
在执行更新操作前,建议先通过查询确认新薪资是否正确:
SELECT EMP.employee_no, EMP.dept_no, EMP.Task_status, EMP.Salary AS 原薪资, CASE WHEN EMP.Task_status = 'C' THEN DEPT.C WHEN EMP.Task_status = 'N' THEN DEPT.N ELSE EMP.Salary END AS 新薪资 FROM EMP JOIN DEPT ON EMP.dept_no = DEPT.dept_no;
关键点说明
- 使用
JOIN(或INNER JOIN)关联两张表的dept_no,确保匹配到员工所属部门的薪资标准 CASE语句根据Task_status的值动态选择对应的薪资字段ELSE EMP.Salary用于处理Task_status不为C或N的异常情况,避免误改不符合条件的记录
内容的提问来源于stack exchange,提问作者Sfdclearner
相关产品推荐
相关产品推荐

