2016-08-02 8 views
0

条件が満たされた場合にのみ列を更新したいとします。だから、コラム「タイプ」のために、私はその現在の値が「MongoDBの」でない場合のみに「MongoDBの」その値を変更したい。これは、私が使用しているものです:SQL:条件が満たされた場合にのみフィールドを更新します。

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

を問題は次のとおりです。でも タイプが "MongoDBは" 私はまだ私のSQL結果に

(影響を受けた1行(複数可))

を参照してください。この練習の要点は、必要がない場合にdb操作を減らすことでした。条件が満たされていないときにレコードを変更するのはなぜですか?

ありがとうございました。

+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行が影響を受けます。

関連する問題