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