2016-08-02 117 views
0

我只想在满足条件时更新列。所以对于列“类型”,我想改变它的值改为“MongoDB的”只有当它的当前值不为“的MongoDB”这是我使用的是什么:SQL:只有满足条件时才更新字段

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

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

(1影响行(S))

。这个练习的重点是在不需要时减少数据库操作。为什么当条件不满足时它仍然在修改记录?

感谢。

+5

为什么不在'WHERE'子句中添加Type <>'MondoDB''? –

+3

“CASE”语句不会改变哪些记录受到影响。只有他们如何受到影响。相反,坚持WHICH记录的标准将在其所属的'WHERE'子句中受到影响。 – JNevill

+0

@AnthonyForloney我不敢相信我没有想到这一点。谢谢! – 90abyss

回答

5

为什么不这样简化呢?

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

但回答你的问题,你仍然设置记录值,即使它的现有价值。该记录还会返回到where子句中,因此无论您的CASE语句如何,您都将受到1行的影响。