81

特定の条件が満たされた場合にのみフィールド値を更新する UPDATE クエリを MySQL で実行することは可能ですか? このようなもの:

UPDATE test
SET
    CASE
        WHEN true
        THEN field = 1
    END
WHERE id = 123

言い換えると:

UPDATE test
SET
    something = 1,        /*field that always gets updated*/
    CASE
        WHEN true
        THEN field = 1    /*field that should only get updated when condition is met*/
    END
WHERE id = 123

これを行う適切な方法は何ですか?

4

6 に答える 6

145

はい!

ここに別の例があります:

UPDATE prices
SET final_price= CASE
   WHEN currency=1 THEN 0.81*final_price
   ELSE final_price
END

docs に記載されているように、変更がない場合、MySQL は行を更新しないため、これは機能します。

列を現在の値に設定すると、MySQL はこれを認識し、更新しません。

于 2013-02-15T11:10:03.700 に答える
42

私の意見では、読みやすい別の解決策は次のとおりです。

UPDATE test 
    SET something = 1, field = IF(condition is true, 1, field) 
    WHERE id = 123

これが行うことは、条件が満たされた場合は「フィールド」を 1 に設定し (例として使用される OP のように)、満たされない場合は「フィールド」の現在の値を使用します。以前の値を使用することは、変更しないことと同じなので、これで終わりです。

于 2016-01-29T10:45:59.910 に答える
17

これを試して:

UPDATE test
SET
   field = 1
WHERE id = 123 and condition
于 2013-02-15T11:10:01.117 に答える