以下是我希望使用UPDATE语句实现的表格。
+----+----+---+---+----+----------+----------+----------+
| ID | A | B | C | D | CalcA | CalcB | CalcC |
+----+----+---+---+----+----------+----------+----------+
| 1 | 6 | 5 | 2 | 10 | =See SQL | =See SQL | =See SQL |
| 2 | 8 | 5 | 2 | 10 | =See SQL | =See SQL | =See SQL |
| 3 | 10 | 5 | 2 | 10 | =See SQL | =See SQL | =See SQL |
+----+----+---+---+----+----------+----------+----------+
实现此目的的当前UPDATE语句如下......
UPDATE EXAMPLE
SET CalcA = CASE A WHEN A - B THEN A + C WHEN C - D THEN A + B + C - D WHEN 3 THEN A * (B + C) WHEN 5 THEN A * D END
, CalcB = CalcA * 2 + (A + B + C + D) * 542 + (D * C) + A * 27
, CalcC = CalcB + A + B - C - D * 10
现在,当前形式的计算不会在一次执行中正确设置所有列,因为它们依赖于前一次计算的结果。
要纠正这个问题,我可以单独完成所有计算。即......
UPDATE EXAMPLE
SET CalcA = CASE A WHEN A - B THEN A + C WHEN C - D THEN A + B + C - D WHEN 3 THEN A * (B + C) WHEN 5 THEN A * D END
, CalcB = (CASE A WHEN A - B THEN A + C WHEN C - D THEN A + B + C - D WHEN 3 THEN A * (B + C) WHEN 5 THEN A * D END) * 2 + (A + B + C + D) * 542 + (D * C) + A * 27
, CalcC = ((CASE A WHEN A - B THEN A + C WHEN C - D THEN A + B + C - D WHEN 3 THEN A * (B + C) WHEN 5 THEN A * D END) * 2 + (A + B + C + D) * 542 + (D * C) + A * 27) + A + B - C - D * 10
但是,正如您所看到的,这会导致一些非常长的计算,这些计算容易出错并且难以检查。
所以我的问题是如何在没有这些极长的SET计算的情况下让这些计算在一个更新语句中正常工作?