Bạn có thể thực hiện phép tính với hai truy vấn con riêng biệt:
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';
Các chỉ mục có thể được sử dụng cho mỗi truy vấn con, vì vậy nhìn chung nó sẽ nhanh hơn. Nhân tiện, bạn không phải lo lắng về NULL
giá trị, bởi vì COUNT(*)
trong một truy vấn con tương quan luôn trả về một giá trị. Nếu không có gì phù hợp, giá trị sẽ là 0
.