我有一个包含三列整数值的表。在前两列中,我有一些值。现在我需要使用其他两列中最小的值更新第三列 我尝试过使用
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression
但我收到如下错误:
{{1}}。
答案 0 :(得分:2)
您可以使用LEAST
进行更新:
UPDATE mytable
SET col3 = LEAST(COALESCE(col1, col2), COALESCE(col2, col1))
WHERE col1 IS NOT NULL OR col2 IS NOT NULL
您无需查询表格即可获得col2
,col1
值。您可以直接在SET
查询的UPDATE
部分中使用它们。
注意: COALESCE
用于处理NULL
值。如果col1
,col2
均为NULL
,则col3
也会设置为NULL
。
在SQL Server中,您可以使用:
UPDATE mytable
SET col3 = CASE
WHEN col2 IS NULL OR col1 < col2 THEN col1
ELSE col2
END
WHERE col1 IS NOT NULL OR col2 IS NOT NULL
在SQL Server 2012或更高版本中,您可以使用IIF
:
UPDATE mytable
SET col3 = IIF(col2 IS NULL OR col1 < col2, col1, col2)
WHERE col1 IS NOT NULL OR col2 IS NOT NULL
答案 1 :(得分:1)
您不需要自己加入表,也可以使用同一查询中的列数据
update table
set col3 = CASE WHEN (col2 is null OR col1 < col2 )
THEN col1 ELSE col2 END
WHERE col1 is not null or col2 is not null
你的查询的问题是你正在使用一个相关的查询,它选择了col1和col2(这基本上很好但不必要)而你没有过滤结果(col1,col2要采用?)所以对于每个col3你想要更新,你有一堆其他值,当你只能有1.如果你想让你的查询工作,你所要做的就是添加一个关系条件。