2014-10-04 119 views
3

我想写这样的查询,我得到一个错误。这是我第一次使用案例,所以这就是我认为问题所在的地方。查询使用CASE当

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 = CASE WHEN t.col IS NULL THEN 1 ELSE t.col + 1 END WHERE ... ** – spencer7593 2014-10-04 18:35:42

回答

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 

你也为了配合9211parent_post_idattachment_id使用或操作时需要组()or条件,也有你有混乱情况在您的查询如何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 s语法是​​。使用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