使用SQL Query使用另一个列值更新一个列值

时间:2016-02-15 07:32:22

标签: sql sql-server sql-update case

我有一个包含三列整数值的表。在前两列中,我有一些值。现在我需要使用其他两列中最小的值更新第三列 我尝试过使用

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression

但我收到如下错误:

{{1}}。

2 个答案:

答案 0 :(得分:2)

您可以使用LEAST进行更新:

UPDATE mytable 
SET col3 = LEAST(COALESCE(col1, col2), COALESCE(col2, col1))
WHERE col1 IS NOT NULL OR col2 IS NOT NULL

您无需查询表格即可获得col2col1值。您可以直接在SET查询的UPDATE部分中使用它们。

注意: COALESCE用于处理NULL值。如果col1col2均为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

Demo here

答案 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.如果你想让你的查询工作,你所要做的就是添加一个关系条件。