小编典典

MySQL-使用SET语句的UPDATE查询取决于前一个SET语句的结果

sql

这是我想通过UPDATE语句实现的表格格式表示。

+----+----+---+---+----+----------+---------------+---------------+
| ID | A  | B | C | D  |  Calc A  |    Calc B     |    Calc C     |
+----+----+---+---+----+----------+---------------+---------------+
|  1 |  6 | 5 | 2 | 10 | =[A]-[B] | =[Calc A]/[D] | =[B]/[Calc B] |
|  2 |  8 | 5 | 2 | 10 | =[A]-[B] | =[Calc A]/[D] | =[B]/[Calc B] |
|  3 | 10 | 5 | 2 | 10 | =[A]-[B] | =[Calc A]/[D] | =[B]/[Calc B] |
+----+----+---+---+----+----------+---------------+---------------+

我当前的UPDATE语句来实现此目标如下…

UPDATE [EXAMPLE]
SET [Calc A]    = A - B
    , [Calc B]  = [Calc A] / D
    , [Calc C]  = B / [Calc B]

但是,它没有按预期工作。[Calc A]将在第一个UPDATE上正确计算。但是,[Calc B]将使用[Calc
A]中的OLD值而不是我刚刚写入数据库的NEW更新值来进行计算。这对于[Calc C]仍然适用,它再次引用[Calc B]的OLD值。

如果执行UPDATE语句3次,则数据将正确计算出来。在第一次计算中正确设置了[计算A],然后,在第二次UPDATE中,[计算B]将引用正确的[计算A]更新值,然后,在计算中,[计算C]将参考正确的[计算B]值。第三次更新。

所以我的问题是如何在ONE update语句中将所有列设置为正确的值?


阅读 222

收藏
2021-04-14

共1个答案

小编典典

只需独立进行计算即可:

update [EXAMPLE]
set [Calc A] = A - B,
    [Calc B] = (A - B) / D,
    [Calc C] = B / ((A - B) / D)
2021-04-14