programing

MySQL : 조건이 충족되는 경우에만 필드 업데이트

nasanasas 2020. 12. 27. 11:03
반응형

MySQL : 조건이 충족되는 경우에만 필드 업데이트


특정 조건이 충족되는 경우에만 필드 값을 업데이트하는 MySQL에서 UPDATE 쿼리를 수행 할 수 있습니까? 이 같은:

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

이를 수행하는 올바른 방법은 무엇입니까?


예!

여기에 또 다른 예가 있습니다.

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

이것은 문서에서 언급했듯이 변경 사항이 없으면 MySQL이 행을 업데이트하지 않기 때문에 작동합니다 .

열을 현재 가지고있는 값으로 설정하면 MySQL은이를 인식하고 업데이트하지 않습니다.


제 생각에 더 읽기 쉬운 또 다른 해결책은 다음과 같습니다.

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

이것이하는 일은 조건이 충족되면 'field'를 1 (예로 사용 된 OP처럼)로 설정하고 충족되지 않으면 'field'의 현재 값을 사용합니다. 이전 값을 사용하는 것은 변경하지 않는 것과 동일하므로 완료됩니다.


이 시도:

UPDATE test
SET
   field = 1
WHERE id = 123 and condition

MySQL IF()조건부 함수를 사용할 수있는 또 다른 솔루션 :

UPDATE test
SET  field  = IF(something == 1{CONDITION}, 1 {NEW VALUE}, field)
WHERE `id` = 5

또 다른 변형 :

UPDATE test
SET field = IF ( {condition}, {new value}, field )
WHERE id = 123

이것은 업데이트됩니다 field{new value}경우에만 {condition}충족


AND 조건으로 솔루션을 찾았습니다. $trainstrength = "UPDATE user_character SET strength_trains = strength_trains + 1, trained_strength = trained_strength +1, character_gold = character_gold - $gold_to_next_strength WHERE ID = $currentUser AND character_gold > $gold_to_next_strength";

참조 URL : https://stackoverflow.com/questions/14893355/mysql-update-a-field-only-if-condition-is-met

반응형