Como replace NULL por 0 na consulta?

Eu tenho essa consulta:

$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)); 

Concentre-se nesta linha:

 WHEN id = ? AND NOT ? THEN 15 END) 

Quando NOT ? é falso (na outra palavra $isOwnAnswer = true ) , o valor de reputatuin para esse usuário será NULL . Porque reputation = reputation + NULL avalia reputation = NULL .

Bem, como posso evitar isso? Eu quero quando essa condição é falsa , então a reputation não muda.

Não há necessidade de envolvê-lo com outro CASE/COALESCE/IFNULL ou qualquer coisa, basta usar o CASE EXPRESSION ELSE , no caso de todas as condições não serem atendidas, o ELSE será usado.

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

Use COALESCE :

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