我正在尝试使用表{B}列中的值更新表A的列,该列基于if Table A.col1 = TableB.Col1
。
问题:如果在Null
中找不到Col1
,我会使用TableB.Col1
覆盖TableA列值。
我当前的查询是
UPDATE [tableA]
SET col2 = (SELECT col2 FROM [tableB] WHERE [TableB].col1 = [TableA].col1)
我该如何避免这种情况?
Ex:TableA
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
有什么想法吗?
答案 0 :(得分: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
)
答案 1 :(得分: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。
答案 2 :(得分:0)
应该这样做,不是吗?
UPDATE [tableA]
SET col2= (select col2 from [tableB] where [TableB].col1=[TableA].col1 and [TableB].col1 IS NOT NULL )