使用CASE WHEN查询

时间:2014-10-04 18:22:24

标签: mysql sql-update 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

2 个答案:

答案 0 :(得分:5)

您可以按以下方式重写

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

您还需要在or中对()条件进行分组,以便9211parent_post_idattachment_id匹配或操作,同时令人困惑您在查询中的条件parent_post_idattachment_id如何同时等于2个值可能正在寻找

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

答案 1 :(得分: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