仅当存在与该字段相关的值时才更新特定字段
让我觉得你真的想要这样做:
UPDATE a
SET ResultType1 = CASE WHEN b.[Type] = 'type1'
THEN b.value
ELSE ResultType1
END
, ResultType2 = CASE WHEN b.[Type] = 'type2'
THEN b.value
ELSE ResultType2
END
FROM tableA AS a
INNER JOIN tableB AS b ON a.ID = b.ID
因此,如果不满足 b.Type 条件,ResultType1/2 将设置为它们的现有值,而不是设置为 NULL。
我假设当你说“不完整的值集”时,你的意思是有些被设置为 NULL。
导致这种行为的原因是表达式中的ELSE NULL
隐含CASE
。
如果你真的想用空值更新ResultType1
和ResultType2
,但只对那些不同的行'type'
,一个稍微不同的查询会做:
UPDATE a
SET ResultType1 = CASE WHEN b.[Type] = 'type1'
THEN b.value
ELSE NULL --- this line can be removed
END
, ResultType2 = CASE WHEN b.[Type] = 'type2'
THEN b.value
ELSE NULL --- this one, too
END
FROM tableA AS a
INNER JOIN tableB AS b ON a.ID = b.ID
WHERE b.[Type] IN ('type1', 'type2')