Счетчик SQL по 3 таблицам - PullRequest
0 голосов
/ 19 августа 2010

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

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 с количеством одобренных и не удаленных благотворительных организаций.

1 Ответ

4 голосов
/ 19 августа 2010

Попробуйте изменить его следующим образом:

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 (Charities) в предложении WHERE, вы устанавливаете его таким образом, чтобы, когда эти значения были NULL (т. Е. Нет записей в благотворительных организациях), тогда данные издругие таблицы также исключаются.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...