2017-08-28 2 views
0

Ich bin nicht sehr vertraut mit SQL. Ich habe eine folgende Datenbankstruktur: Application, die N Anzahl der ApplicationSteps hat, aber jeder ApplicationStep hat eine CaseStep ist und jeder CaseStep hat StepType, die mit einem Schlüssel Enum zum Beispiel 1 und 2.Wie MS SQL-Abfrage nach Kind Tabelle filtern

Bitte kann mir jemand helfen um alle Applications zu nehmen, wo Application nicht ApplicationStep haben, wo CaseStep.Id = 5 AND CaseStep.StepType = 2.

Mein DB-Struktur ist wie folgt vor:

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

Meine aktuelle SQL-Abfrage:

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 

Antwort

3

Wenn ich richtig verstehe, können Sie 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 ; 
Verwandte Themen