2016-08-02 106 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行的影響。

相關問題