我甚至不确定我的问题标题是否是我的问题的正确术语,但我们走了。
我有以下查询:
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。