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

Certification 5 には 3 つの関連する要件がありますが、1 つがアクティブではありません。AND RQ.Status = 'Active'2番目の左外部結合に追加すると正しい結果が得られると思っていましたが、クエリの実行時に無視されているようです。

以前は結合に AND 条件を使用していたので、今回は何が問題なのかわかりません。サブクエリを実行することでこれを解決できることはわかっていますが、そうしない方が望ましいでしょう。

必要に応じて、テーブルの定義とサンプル データを提供できます。

編集: データ付きのテーブルは次のとおりです - http://img24.imageshack.us/img24/6598/tablesc.png数値を含む 列は整数として定義され、テキストを含む列は varchar として定義されます。

4

0 に答える 0