Mysql 如何根据同一组条件更新多个列?

Mysql 如何根据同一组条件更新多个列?,mysql,Mysql,我正在基于相同的条件更新两个不同表的两列,如何使用单个案例来实现这一点 提前感谢我不确定您为什么认为您当前的解决方案在某些方面存在缺陷,但如果可以从一级解决方案中计算出增加,则应在公式中使用currentgrade,例如: update employee as e,employee_salary as es set e.annualincome= case e.currentgrade when 1 then e.annualincome+e.annualinco

我正在基于相同的条件更新两个不同表的两列,如何使用单个案例来实现这一点


提前感谢

我不确定您为什么认为您当前的解决方案在某些方面存在缺陷,但如果可以从一级解决方案中计算出增加,则应在公式中使用currentgrade,例如:

    update employee as e,employee_salary as es
    set e.annualincome=
    case e.currentgrade
    when 1 then e.annualincome+e.annualincome*0.10
    when 2 then e.annualincome+e.annualincome*0.15
    end,
    es.income=
    case e.currentgrade
    when 1 then es.income+es.income*0.10
    when 2 then es.income+es.income*0.15
    end
    where e.employeeid=es.employeeid and salarydate >'2011-09-01%';
但是,老实说,我会坚持你所拥有的。意图是明确的,通过一点缩进管理可以使其更加清晰:-

由于您已经指出,不能从等级计算增加额,因此另一种选择是在交易控制下分两个阶段进行,这一点更为明确:

update employee as e, employee_salary as es
    set e.annualincome = e.annualincome * (1.05 + e.currentgrade * 0.05),
    set es.income      = es.income      * (1.05 + e.currentgrade * 0.05)
where e.employeeid = es.employeeid
  and e.currentgrade in (1,2)
  and salarydate > '2011-09-01%';

如果你有一个currentgrade上的索引可以使用,那么它的运行速度可能会快得多。每行函数(包括应用于每行的case)的可伸缩性不尽人意。通常最好尽早减少行数。

currentgrade与百分比增加没有任何关系。但根据currentgrade的不同,我们将更新收入和年度收入,并提供指定的百分比。@pavi:然后查看最后的事务解决方案。这比现在错误的分数增加方案和原始问题中复杂的表达式要明确得多。我应该在单个查询中执行更新,因为它会增加系统的开销server@pavi,您可能需要测量服务器上的性能。我想你会感到惊讶的。查询的数量通常不是杀手锏,更多的是那些查询的复杂性。非常感谢你。我不知道这一点。所以你认为第二个查询比我写的查询更有效?
update employee as e, employee_salary as es
    set e.annualincome = e.annualincome * 1.10,
    set es.income      = es.income      * 1.10
where e.employeeid = es.employeeid
  and e.currentgrade = 1
  and salarydate >'2011-09-01%';

update employee as e, employee_salary as es
    set e.annualincome = e.annualincome * 1.15,
    set es.income      = es.income      * 1.15
where e.employeeid = es.employeeid
  and e.currentgrade = 2
  and salarydate >'2011-09-01%';