2014-10-04 2 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 = CASE КОГДА t.col IS NULL THEN 1 ELSE t.col + 1 END WHERE ...' ** – spencer7593

ответ

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 состояние в () для того, чтобы соответствовать 9211 против parent_post_id и attachment_id с или операции, также есть запутанные условия у вас есть в вашем запросе, как parent_post_id и attachment_id могут быть равны 2 значениям одновременно. Возможно, вы ищете

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

update s синтаксис 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 
Смежные вопросы