2010-08-19 2 views
0

У меня есть запрос, который отлично работает при наличии данных, но не тогда, когда у меня ничего нет в таблице благотворительных услуг. Любая помощь была бы чрезвычайно оценена.SQL Count на 3 таблицы

SELECT C.CategoryId 
    , C.CategoryName 
    , ISNULL(COUNT(CC.CharityId), 0) as CharityCount 
    , C.IsDeleted 
FROM Charity.Categories C 
LEFT JOIN Charity.CharityCategories CC on C.CategoryId = CC.CategoryId 
LEFT JOIN Charity.Charities CH ON CC.CharityId = CH.CharityId 
WHERE CH.IsApproved = 1 and CH.IsDeleted = 0 
GROUP BY C.CategoryId, C.CategoryName , C.IsDeleted 
Order By C.CategoryName 

Я в основном пытаюсь получить все доступные Charity.Categories с графами утвержденных и не удаленные благотворительных организаций.

ответ

4

Попробуйте изменить его таким образом:

SELECT C.CategoryId 
    , C.CategoryName 
    , ISNULL(COUNT(CC.CharityId), 0) as CharityCount 
    , C.IsDeleted 
FROM Charity.Categories C 
LEFT JOIN Charity.CharityCategories CC on C.CategoryId = CC.CategoryId 
LEFT JOIN Charity.Charities CH ON CC.CharityId = CH.CharityId 
    AND CH.IsApproved = 1 and CH.IsDeleted = 0 
GROUP BY C.CategoryId, C.CategoryName , C.IsDeleted 
Order By C.CategoryName 

Ссылаясь CH (Благотворительный) в предложении WHERE вы установите его таким образом, что, когда эти значения были NULL (т.е. не запись в благотворительных организациях не соответствует), то данные от других таблицы также исключаются.

Обычно я пытаюсь включить все ограничения/фильтры в предложение соединения, где это возможно, по этой причине.

+0

Спасибо, Дэниэл, это работает. Я буду отмечать как ответ как можно скорее. –

+0

+1. Мне пришлось на самом деле прочитать вопрос, чтобы найти разницу между обоими запросами . –

Смежные вопросы