私の質問のタイトルが私の問題の正しい用語であるかどうかさえわかりませんが、ここに行きます.
次のクエリがあります。
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
Certification 5 には 3 つの関連する要件がありますが、1 つがアクティブではありません。AND RQ.Status = 'Active'
2番目の左外部結合に追加すると正しい結果が得られると思っていましたが、クエリの実行時に無視されているようです。
以前は結合に AND 条件を使用していたので、今回は何が問題なのかわかりません。サブクエリを実行することでこれを解決できることはわかっていますが、そうしない方が望ましいでしょう。
必要に応じて、テーブルの定義とサンプル データを提供できます。
編集: データ付きのテーブルは次のとおりです - http://img24.imageshack.us/img24/6598/tablesc.png数値を含む 列は整数として定義され、テキストを含む列は varchar として定義されます。