Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment puis-je utiliser COALESCE() dans la clause WHERE de manière optimale ?

Vous pouvez effectuer le calcul avec deux sous-requêtes distinctes :

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';

Les index peuvent être utilisés pour chaque sous-requête, il devrait donc être globalement plus rapide. Au fait, vous n'avez pas à vous soucier de NULL valeurs, car COUNT(*) dans une sous-requête corrélée renvoie toujours une valeur. Si rien ne correspond, la valeur sera 0 .