使用游标和循环更新错误值的MySQL触发器

使用游标和循环更新错误值的MySQL触发器,mysql,sql,if-statement,triggers,cursor,Mysql,Sql,If Statement,Triggers,Cursor,嘿,我在另一个表上的更新触发的循环内的update语句中设置正确的值时遇到问题 我有两张表,员工和基本工资。基本工资是新员工将获得的工作岗位标准工资。在employees表中有一个工资列,通常为基本工资,但有时可能高于基本工资。例如,如果一个人已经在一个职位上工作多年,他可能会得到比刚得到这份工作的人更高的薪水 我在更新基本工资表后触发了一个触发器,该表为该职位的每个员工设置了新的基本工资。触发因素还应考虑到一些员工可能拥有的额外工资,并将其添加到新基本工资的工资中 触发器起作用,但它不会给那些

嘿,我在另一个表上的更新触发的循环内的update语句中设置正确的值时遇到问题

我有两张表,员工和基本工资。基本工资是新员工将获得的工作岗位标准工资。在employees表中有一个工资列,通常为基本工资,但有时可能高于基本工资。例如,如果一个人已经在一个职位上工作多年,他可能会得到比刚得到这份工作的人更高的薪水

我在更新基本工资表后触发了一个触发器,该表为该职位的每个员工设置了新的基本工资。触发因素还应考虑到一些员工可能拥有的额外工资,并将其添加到新基本工资的工资中

触发器起作用,但它不会给那些获得高于基本工资的员工增加额外工资

我在这里创作了一把小提琴:

在fiddle中,经理的基本工资是150,我在employees表中添加了两个经理,一个是150(基本工资),另一个是170(比基本工资高20)。如果我现在想把经理的基本工资改为160,第一个经理的工资应该是160,第二个经理的工资应该是170减去旧的基本工资(150)加上新的基本工资=180。 由于某种奇怪的原因,现在两位经理的薪水都变为160英镑

你知道为什么这样不行吗?我是不是遗漏了什么

提前感谢:)

问题在这里
updateemployees SET salary=mtottalsalary,其中jobTitel=OLD.position

您正在使用position更新employee表,它将使用您需要考虑的
employeeid
值更新具有相同职位的每位员工

先申报

声明empId INT

然后将员工id提取到游标中

从jobTitel=OLD.position的员工中选择工资、员工ID

并在声明的变量中使用它

将employeeCursor提取到mSalary、empId中

最后将update命令更改为

updateemployeesetsalary=mtottalsalary,其中employeeId=empId

这是小提琴