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 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。
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 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。
不,如果您的表有超过 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
而不是两个WHEN
s。
您在这里遇到的问题是您没有在子查询中指定主键以匹配更新行的主键。因此,它返回与错误消息所指的条件匹配的所有行。
可能您的代码应该是:
UPDATE TableABC
SET A = CASE
WHEN B - C >= A THEN A
WHEN B - C < A THEN B - C
END
但是你的 SQL 不完整我不能确定。