하나의 쿼리에서 다른 값으로 여러 행 업데이트


12

다른 값으로 여러 행을 업데이트하는 방법을 이해하려고하는데 그것을 얻지 못합니다. 해결책은 어디에나 있지만 나에게는 이해하기 어려운 것 같습니다.

예를 들어, 하나의 쿼리에 대한 두 가지 업데이트 :

UPDATE mytable SET fruit='orange', drink='water', food='pizza' WHERE id=1;

UPDATE mytable SET fruit='strawberry', drink='wine', food='fish' WHERE id=2;

CASE WHEN .. THEN ... END 작동 원리 및 사용법을 이해할 수 없습니다.

누군가 나를 도울 수 있는지 궁금합니다.

답변:


11
UPDATE mytable SET
    fruit = CASE WHEN id=1 THEN 'orange' ELSE 'strawberry' END,
    drink = CASE WHEN id=1 THEN 'water'  ELSE 'wine'       END,
    food  = CASE WHEN id=1 THEN 'pizza'  ELSE 'fish'       END
WHERE id IN (1,2);

개인적으로 사용하면 CASE WHEN THEN END서투른 것처럼 보입니다.

IF 함수를 사용하여이를 코딩 할 수 있습니다 .

UPDATE mytable SET
    fruit = IF(id=1,'orange','strawberry'),
    drink = IF(id=1,'water','wine'),
    food  = IF(id=1,'pizza','fish')
WHERE id IN (1,2);

시도 해봐 !!!

주의 사항 : CASE WHEN THEN END여러 값을 처리 할 때만 유용합니다 (2 개 이상)


이 IF 기능에 대해 몰랐습니다. = IF (id = 1, 왜 필요한가요?
user3162468

4
sinle 쿼리에서 약 100k 레코드를 업데이트하는 데 이것을 사용할 수 있습니까?
AMB

4

INSERT ... ON DUPLICATE KEY UPDATE

둘 이상의 행을 업데이트하려면 매우 복잡한 조건을 작성해야합니다. 이 경우 INSERT ... ON DUPLICATE KEY UPDATE접근 방식 을 사용할 수 있습니다 .

INSERT into `mytable` (id, fruit, drink, food)
VALUES
    (1, 'orange', 'water', 'pizza'),
    (2, 'strawberry', 'wine', 'fish'),
    (3, 'peach', 'jiuce', 'cake')
ON DUPLICATE KEY UPDATE
    fruit = VALUES(fruit), 
    drink = VALUES(drink), 
    food = VALUES(food);

3
자동 증분을 사용하는 경우 테이블의 자동 증분 값이 증가합니다. 처리량이 많은 테이블의 경우 바람직하지 않을 수 있습니다. 추가 정보 stackoverflow.com/a/23517191/2560641
Juliano
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.