请求修正UPDATE关联查询:为无奖金员工发放2%薪资奖金
问题分析与修正方案
原SQL存在以下核心问题:
- 直接更新聚合查询结果:聚合后的子查询属于不可更新视图,无法执行UPDATE操作
- 分组字段不合理:用
first_name分组可能因重名导致逻辑错误,应使用唯一标识employee_id - 逻辑混淆:
bon是聚合计算的临时字段,并非实际表中可修改的字段,需求需针对bonus_1表的真实数据操作
方案1:更新bonus_1中已存在但bonus_amount为NULL的记录
若员工在bonus_1已有记录但奖金金额为空,执行以下SQL更新:
UPDATE bonus_1 b JOIN employee_1 e ON b.employee_id = e.employee_id SET b.bonus_amount = e.salary * 0.02 WHERE b.bonus_amount IS NULL;
方案2:为从未获得奖金的员工插入新奖金记录
若员工在bonus_1中无任何记录(从未获得奖金),执行以下SQL插入:
INSERT INTO bonus_1 (employee_id, bonus_amount) SELECT e.employee_id, e.salary * 0.02 FROM employee_1 e LEFT JOIN bonus_1 b ON e.employee_id = b.employee_id WHERE b.employee_id IS NULL;
内容的提问来源于stack exchange,提问作者4PS18IS039 SAMARTH
相关产品推荐
相关产品推荐

