0

我正在尝试使用基于 if 的表 B 列中的值更新表 A 的列Table A.col1 = TableB.Col1

Null问题:我用if Col1is not found in覆盖 TableA 列值TableB.Col1

我目前的查询是

UPDATE [tableA]
SET col2 = (SELECT col2 FROM [tableB] WHERE [TableB].col1 = [TableA].col1)

我怎样才能避免这种情况?

例如:表 A

Col1 Col2
1    100
2    200
3    300

表B

Col1 Col2
1    1000
3    3000

结果表应为:

表 A

Col1 Col2
1    1000
2    200
3    3000

但我得到:

Col1 Col 2
1    1000
2    null
3    3000

有任何想法吗?

4

3 回答 3

1

您不想更新整个表,因此您的查询需要一个where子句。在这种情况下 :

WHERE exists (select 1 
                from [tableB] 
                where [TableB].col1=[TableA].col1 
                  and [TableB].col2 is not NULL -- that condition may or may not be needed 
             )
于 2013-07-26T15:04:34.847 回答
1

你可以这样做:

UPDATE [tableA]
SET col2 = COALESCE(
             (SELECT col2 FROM [tableB] WHERE [TableB].col1 = [TableA].col1),
             col2)

COALESCE返回其参数中的第一个非 NULL 表达式。

或者,您可以这样做:

UPDATE a
SET col2 = b.col2
FROM TableA a
    INNER JOIN
     TableB b
        ON
            a.col1 = b.col1

但是您应该知道,第二种形式是 SQL Server 方言,而不是标准 SQL。

于 2013-07-26T15:34:25.030 回答
0

这应该这样做,不是吗?

UPDATE [tableA]
SET col2= (select col2 from [tableB] where [TableB].col1=[TableA].col1 and [TableB].col1 IS NOT NULL )
于 2013-07-26T14:55:52.733 回答