2017-08-28 9 views
0

私はSQLにあまり慣れていません。私は、次のデータベース構造を持っている:ApplicationApplicationStepsのN数を持っていますが、ApplicationStepがあり、それぞれが1 CaseStepを持っており、各CaseStepキー1と2子供のテーブルでMS SQLクエリをフィルタリングする方法

と例えば列挙型である、StepTypeを持っている誰も私を助けることができるしてくださいすべてApplicationsApplicationにはApplicationStepがありません。ここでは、CaseStep.Id = 5 AND CaseStep.StepType = 2です。

1. Application 
    - Id 
    - Many(ApplicationStep) 
2. ApplicationStep 
    - Id 
    - ApplicationId 
    - CaseStepId 
3. CaseStep 
    - Id 
    - StepType 
    - Many(ApplicationStep) 

私の現在のSQLクエリは:私が正しく理解していれば

SELECT 
Application.Id, 
Application.CreationDateTime, 
Application.Status, 
[Case].Name AS CaseName 

FROM Application 

LEFT JOIN [Case] ON Application.CaseId = [Case].Id 

WHERE Application.CaseId = 6 AND 
     Application.Status = 5 

ORDER BY Application.CreationDateTime 
    DESC OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY 

答えて

3

、あなたが使用することができNOT EXISTS

SELECT a.* 
FROM Application a 
WHERE NOT EXISTS (SELECT 1 
        FROM ApplicationSteps aps JOIN 
         CaseStep cs 
         ON aps.CaseStepId = c.CaseStepId 
        WHERE aps.ApplicationId = a.ApplicationId AND 
         cs.CaseStepId = 5 AND cs.StepType = 2 
       ) 
ORDER BY a.CreationDateTime DESC 
FETCH FIRST 10 ROWS ONLY ; 

私のDB構造は以下の通りです

関連する問題