MySQL Workbench执行存储过程遇Error Code:1241错误求助
解决MySQL存储过程Error Code: 1241的问题
嘿,我来帮你搞定这个报错!你遇到的Error Code: 1241其实是个常见的小坑——你的WHERE子句里的子查询返回了两列数据(first_name和salary),但MySQL的WHERE条件只能处理单列的匹配判断或者布尔结果,多列的结果它没法理解怎么用来匹配行,所以就报错啦。
下面给你两种靠谱的修正方案,任选一种都能解决问题:
方案一:用EXISTS子查询判断存在性
修改存储过程里的UPDATE语句,用EXISTS来检查当前员工是否属于目标部门,子查询只需要返回存在性验证(不用返回多余的列):
delimiter $$ create procedure usp_raise_salaries1(department_name varchar(30)) begin update employees as e set salary = salary * 1.05 where exists ( select 1 -- 这里用1就行,只需要确认行存在,不用返回实际数据 from departments as d where e.department_id = d.department_id and d.name = department_name ); end $$ delimiter ;
方案二:直接关联表进行UPDATE(更高效推荐)
这种方式不需要子查询,直接在UPDATE里关联employees和departments表,过滤出目标部门的员工后直接更新薪资,逻辑更直观,性能也更好:
delimiter $$ create procedure usp_raise_salaries1(department_name varchar(30)) begin update employees as e join departments as d on e.department_id = d.department_id set e.salary = e.salary * 1.05 where d.name = department_name; end $$ delimiter ;
改完之后,执行你的调用语句:
set @answer = 'Sales'; call usp_raise_salaries1(@answer);
就不会再报错啦~
内容的提问来源于stack exchange,提问作者yocalee
相关产品推荐
相关产品推荐

