programing

MySQL의 조건부 업데이트

powerit 2023. 10. 10. 21:14
반응형

MySQL의 조건부 업데이트

전 그러려고 합니다.UPDATE테이블의 값을 입력합니다. 하지만 조건을 추가해야 합니다.그 기능을 찾았습니다.CASE, 하지만 그게 최선의 방법이라면 그렇지 않습니다.

여기 예가 있습니다.제 테이블은 'relation'입니다.

userid1 | userid2 | name1 | name2

예를 들면 다음과 같습니다.

SELECT * 
FROM relation 
WHERE (userid1 = 3 AND userid2 = 4)
      OR (userid1 = 4 AND userid2 = 3);  

출력:

4 | 3 | 지폐 | 잭

그리고 3과 4의 관계에서 사용자 3의 이름을 바꾸고 싶은데, 그것이 맞는지 모르겠습니다.userid1아니면userid2.

나는 다음과 같은 경우를 생각했습니다.

UPDATE relation 
   CASE WHEN userid1 = 3 THEN SET name1 = 'jack' END 
        WHEN userid2 = 3 THEN SET name2 = 'jack' END 
WHERE (userid1 = 3 AND userid2 = 4) 
      OR (userid1 = 4 AND userid2 = 3);

하지만 작동이 안 돼요!무슨 생각 있어요?

미리 감사드립니다.

안타깝게도 최종적으로 무엇을 얻고 싶은지 확실하지는 않지만, 조건부를 올바르게 사용할 수 있는 방법은 다음과 같습니다.SET당신의UPDATE

UPDATE relation 
   SET name1 = CASE WHEN userid1 = 3 THEN 'jack' ELSE name1 END,
       name2 = CASE WHEN userid2 = 3 THEN 'jack' ELSE name2 END
WHERE (userid1 = 3 AND userid2 = 4) 
   OR (userid1 = 4 AND userid2 = 3);

SQL Fiddle 데모입니다.

이것에 조금 늦었다는 것은 알지만, MySQL의 IF() 기능을 사용하는 것이 더 읽기 쉬운 해결책이 될 것 같습니다.

UPDATE relation
    SET name1 = IF(userid1 = 3, 'jack', name1),
        name2 = IF(userid2 = 3, 'jack', name2)
WHERE (userid1 = 3 AND userid2 = 4) 
   OR (userid1 = 4 AND userid2 = 3);

IF 기능은 다음과 같이 사용됩니다.

IF(condition, value_if_true, value_if_false)

언급URL : https://stackoverflow.com/questions/17265522/conditional-update-in-mysql

반응형