gpt4 book ai didi

使用 CASE 语句的 SQL UPDATE 产生不完整的结果

转载 作者:行者123 更新时间:2023-12-04 22:30:51 24 4
gpt4 key购买 nike

以下代码旨在仅在存在与该字段相关的值时更新特定字段。

它返回一组不完整的值。数百万行是正确的,但数千行的值被错误地设置为 NULL。

这是 SQL 限制,还是我遗漏了什么?

UPDATE a
SET ResultType1 = CASE WHEN b.[Type] = 'type1' THEN b.value END
,ResultType2 = CASE WHEN b.[Type] = 'type2' THEN b.value END
FROM tableA AS a
INNER JOIN tableB AS b ON a.ID = b.ID

最佳答案

update particular fields only when there's a value that relates to that field

让我觉得你真的想这样做:

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。

导致此行为的原因是 CASE 表达式中隐含的 ELSE NULL


如果您确实想用空值更新 ResultType1ResultType2,但仅针对那些具有不同 'type' 的行,a稍微不同的查询会做:

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')

关于使用 CASE 语句的 SQL UPDATE 产生不完整的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10444544/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com