2014-10-04 10 views
3

이와 같은 쿼리를 작성하려고하는데 오류가 발생했습니다. 사건을 처음 사용하는 것이기 때문에 문제가 있다고 생각합니다.CASE WHEN을 사용하여 쿼리

UPDATE my_table 
     CASE 
       WHEN downloads IS NULL THEN 
       SET downloads = 1 
       ELSE 
       SET downloads + 1 
     END 
WHERE attachment_id = 8990 
AND parent_post_id = 9221 
OR  attachment_id = 9211 
AND parent_post_id = 383 
+0

조금만 백업 해주세요. CASE 표현식은 값을 리턴합니다. CASE 표현식을 사용하면 명령문에 표현식을 사용할 수 있습니다 (예 : 컬럼 이름이 어디로 갈 것인지). 이 행의 일부를 따라 할 수 있습니다. ** UPDATE t SET t.col = t.col이 NULL 일 경우 1 ELSE t.col + 1 END WHERE ...'** – spencer7593

답변

5

당신은 또한 parent_post_id에 대한 9211과와 attachment_id 또는 동작을 일치시키기 위해 당신이 그룹에 ()or 조건을 필요

UPDATE my_table 
SET downloads = CASE WHEN downloads IS NULL THEN 1 
       ELSE downloads + 1 END 
WHERE attachment_id = 8990 
AND (parent_post_id = 9221 
OR attachment_id = 9211) 
AND parent_post_id = 383 

아래로 다시 작성할 수 있습니다, 또한 당신이 혼란 조건이 귀하의 쿼리에서 parent_post_idattachment_id은 동시에 2 개의 값과 같을 수 있습니다.

WHERE (attachment_id = 8990 AND parent_post_id = 9221) 
OR (attachment_id = 9211 AND parent_post_id = 383) 
1

update 구문은 update table set col=value where condition입니다. case을 사용해도 변경되지 않습니다. case은 표현식을 반환하는 데만 사용할 수 있습니다.

UPDATE my_table 
SET downloads = CASE WHEN downloads IS NULL THEN 1 ELSE downloads + 1 END 
WHERE attachment_id = 8990 AND 
     parent_post_id = 9221 OR 
     attachment_id = 9211 AND 
     parent_post_id = 383