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。当子查询遵循=,!=,&lt;,&lt; =,&gt;,&gt; =或子查询用作表达式时,不允许这样做。
答案 0 :(得分: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
。我还会使用ELSE
代替两个WHEN
。
答案 1 :(得分:1)
您遇到的问题是您没有在子查询中指定主键以匹配更新行的主键。因此,它返回与错误消息所指的条件匹配的所有行。
您的代码可能应该是:
UPDATE TableABC
SET A = CASE
WHEN B - C >= A THEN A
WHEN B - C < A THEN B - C
END
但是你的SQL不完整我无法确定。