0

我什至不确定我的问题标题是否是我的问题的正确术语,但我们开始了。

我有以下查询:

SELECT          C.ID, C.Name, RCR.Mandate_Level, COUNT(CRR.ID) as Num_Requirements
FROM            tbl_role_certification_rel as RCR
INNER JOIN      tbl_certification as C
ON              C.ID = RCR.Certification_ID 
LEFT OUTER JOIN tbl_certification_requirement_rel as CRR
ON              CRR.Certification_ID = C.ID
LEFT OUTER JOIN tbl_requirement as RQ
ON              RQ.ID = CRR.Requirement_ID  AND RQ.Status = 'Active'
WHERE           RCR.Role_ID = 15
AND             C.Status = 'Active' 
GROUP BY        C.ID, C.Name, RCR.Mandate_Level, RCR.Sort_Order
ORDER BY        RCR.Sort_Order;

哪个应该返回:

5   Certification 2 Optional    2
8   Certification 5 Optional    2
4   Certification 1 Recommended 0

而是返回

5   Certification 2 Optional    2
8   Certification 5 Optional    3
4   Certification 1 Recommended 0

认证 5 确实有 3 项相关要求,但其中一项未激活。我曾认为添加AND RQ.Status = 'Active'到第二个左外连接会提供正确的结果,但是在执行查询时它似乎被忽略了。

在此之前我已经在连接上使用了 AND 条件,所以我不确定这次是什么问题。我知道我可以通过执行子查询来解决这个问题,但最好不要这样做。

如有必要,我可以提供表定义和示例数据。

编辑:这是带有数据的表格 - http://img24.imageshack.us/img24/6598/tablesc.png 带有数字的列被定义为整数,带有文本的列是varchars。

4

0 回答 0