SQL:仅在满足条件时更新字段

7

如果满足条件,我希望只更新一列。对于“类型”列,仅当其当前值不是“MongoDB”时,才将其值更改为“MongoDB”。这是我正在使用的代码:

UPDATE Report
    SET Type = 
    CASE
       WHEN Type <> 'MongoDB' THEN 'MongoDB'
       ELSE Type
    END
    WHERE Id = x

问题是: 即使类型为“MongoDB”,我仍然在我的SQL结果中看到

(受影响的1行) 当条件未满足时,这个练习的整个重点就是减少数据库操作。为什么它仍然会修改记录?

谢谢。

6
为什么不将 Type <> 'MondoDB' 添加到你的 WHERE 子句中? - Anthony Forloney
4
CASE语句不会改变哪些记录受到影响,只会改变它们受到的影响方式。相反,将哪些记录将受到影响的条件放在应该放置的WHERE子句中。 - JNevill
@AnthonyForloney 我简直不敢相信我没想到那个。谢谢! - 90abyss
1个回答

14

为什么不像这样简化呢?

UPDATE Report
SET Type = 'MongoDB'
WHERE Id = x AND Type <> 'MongoDB'

但是要回答你的问题,即使将值设置为现有值,仍然会设置记录值。记录还返回到 where 子句中,因此无论 CASE 语句如何,始终会影响 1 行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接