Как заменить NULL на 0 в запросе?

У меня есть этот запрос:

$db->prepare("UPDATE users SET reputation = reputation + (CASE WHEN id = ? THEN 2 WHEN id = ? AND NOT ? THEN 15 END) WHERE id IN (?, ?); ") ->execute(array($author_ques_id, $author_ans_id, $isOwnAnswer, $author_ans_id, $author_ques_id)); 

Пожалуйста, сосредоточьтесь на этой строке:

 WHEN id = ? AND NOT ? THEN 15 END) 

Когда NOT ? false (другими словами $isOwnAnswer = true ) , значение reputatuin для такого пользователя будет NULL . Потому что reputation = reputation + NULL оценивает reputation = NULL .

Ну, как я могу это предотвратить? Я хочу, когда это условие ложно , тогда reputation не меняется.

Related of "Как заменить NULL на 0 в запросе?"

Не нужно обертывать его другим CASE/COALESCE/IFNULL или что угодно, просто используйте CASE EXPRESSION ELSE , в случае, если все условия не выполняются, будет использоваться ELSE .

 UPDATE users SET reputation = reputation + CASE WHEN id = ? THEN 2 WHEN id = ? AND NOT ? THEN 15 ELSE 0 END WHERE id IN (?, ?); 

Использовать COALESCE :

 UPDATE users SET reputation = reputation + COALESCE((CASE WHEN id = ? THEN 2 WHEN id = ? AND NOT ? THEN 15 END), 0)