Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie kann ich COALESCE() in der WHERE-Klausel optimal verwenden?

Sie können die Berechnung mit zwei separaten Unterabfragen durchführen:

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

Indizes können für jede Unterabfrage verwendet werden, daher sollte es insgesamt schneller sein. Um NULL brauchen Sie sich übrigens keine Gedanken zu machen Werte, weil COUNT(*) in einer korrelierten Unterabfrage gibt immer einen Wert zurück. Wenn nichts übereinstimmt, ist der Wert 0 .