2
update TABLE set A = (
SELECT
    CASE
        WHEN B - C >= A  THEN A
        WHEN B - C <  A THEN B - C
    END AS A
from 
TABLE )

我得到的回应是:

子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。

4

2 回答 2

3

不,如果您的表有超过 1 条记录,这将不起作用。在这种情况下,我不确定您为什么要使用子查询。我想你正在寻找这样的东西:

UPDATE MyTable
SET A = 
    CASE
        WHEN B - C >= A THEN A
        ELSE B - C
    END

此查询将更新A表中每条记录的列。如果B - C大于或等于A,则 的值A不变。否则,A将设置为B - C。我也会使用 anELSE而不是两个WHENs。

于 2013-07-15T19:20:51.513 回答
1

您在这里遇到的问题是您没有在子查询中指定主键以匹配更新行的主键。因此,它返回与错误消息所指的条件匹配的所有行。

可能您的代码应该是:

UPDATE TableABC
SET A = CASE
          WHEN B - C >= A THEN A
          WHEN B - C <  A THEN B - C
        END

但是你的 SQL 不完整我不能确定。

于 2013-07-15T19:25:48.907 回答