2010-08-19 64 views
0

我有一个查询,可以在有数据的情况下正常工作,但在慈善机构表中没有任何数据时无法正常工作。任何帮助将非常感激。跨3个表的SQL计数

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 

通过WHERE子句中引用CH(慈善)您从其他设置,使得当这些值是NULL(即,在慈善机构没有匹配的记录),那么数据表格也被排除在外。

为了这个原因,我通常尽可能在连接子句中包含所有约束/过滤器。

+0

谢谢丹尼尔,那是一种享受。我会尽快回复。 – 2010-08-19 15:13:04

+0

+1。我不得不实际阅读这个问题才能找到两个查询之间的区别。 – 2010-08-19 15:14:55