Можете да направите изчислението с две отделни подзаявки:
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';
Индексите могат да се използват за всяка подзаявка, така че като цяло трябва да е по-бърза. Между другото, не е нужно да се притеснявате за NULL
стойности, защото COUNT(*)
в корелирана подзаявка винаги връща стойност. Ако нищо не съвпада, стойността ще бъде 0
.