Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como posso usar COALESCE() na cláusula WHERE de forma otimizada?


Você pode fazer o cálculo com duas subconsultas separadas:
select coalesce(qa2.subject, qa.subject) as question_subject,
       qa.body,
       ( (select count(*)
          from viewed_items vi
          where qa.related = vi.question_id
         ) +
         (select count(*)
          from viewed_items vi
          where qa.related is null and qa.id = vi.question_id
         )
        ) as total_question_viewed
from questions_and_answers qa left join
     questions_and_answers qa2
     on qa.related = qa.id 
where body like ':entry';

Os índices podem ser usados ​​para cada subconsulta, portanto, em geral, deve ser mais rápido. A propósito, você não precisa se preocupar com NULL valores, porque COUNT(*) em uma subconsulta correlacionada sempre retorna um valor. Se nada corresponder, o valor será 0 .