You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 18:42:09