如何为employees表的salary列对应6个emp_id批量插入薪资值
正确更新已有员工薪资的SQL方法
你之前的语句错误原因
INSERT语句是用来新增整条记录的,不是更新已有行的字段,执行它会试图插入6条无emp_id的新记录(大概率因emp_id非空报错),完全不符合需求。- 第二条语句语法错误,
ALTER TABLE仅用于修改表结构(比如添加列、调整字段类型),不能用来更新或插入数据。
方法1:直接用UPDATE+CASE匹配更新(适合少量数据)
这是最直观的方式,针对每个emp_id设置对应薪资:
UPDATE employees SET salary = CASE emp_id WHEN 101 THEN 37000 WHEN 102 THEN 32000 WHEN 103 THEN 35000 WHEN 104 THEN 45000 WHEN 105 THEN 55000 WHEN 106 THEN 37000 ELSE salary -- 保留其他员工的默认薪资,避免误改 END;
方法2:临时表关联更新(适合批量数据)
如果后续有大量类似批量更新操作,用临时表存储对应关系再关联更新更高效:
-- 创建临时表存储emp_id和对应薪资 CREATE TEMPORARY TABLE emp_salary ( emp_id INT, salary INT ); -- 插入对应数据 INSERT INTO emp_salary (emp_id, salary) VALUES (101,37000), (102,32000), (103,35000), (104,45000), (105,55000), (106,37000); -- 关联原表更新薪资 UPDATE employees e JOIN emp_salary es ON e.emp_id = es.emp_id SET e.salary = es.salary; -- 用完可删除临时表 DROP TEMPORARY TABLE emp_salary;
内容的提问来源于stack exchange,提问作者Hamza Iqbal
相关产品推荐
相关产品推荐

