2017-11-15 2 views
0

Es gibt zwei Tabellen: CourseModules und Studenten.Prüfen, ob mehrere Werte in Tabelle 1 in Tabelle 2 mit mehreren Werten definiert sind

Ein Student kann an verschiedenen Modulen teilnehmen. Wenn ein Schüler das Modul erfolgreich absolviert, wird er in der Datenbank unter StudentsModule mit der Modul-ID gespeichert.

Die Tabelle courseModules definiert alle erforderlichen Module für einen Studenten, um ein Zertifikat zu erhalten.

Ich brauche einen Überblick über alle Studenten, die ein Zertifikat haben. siehe

Im Beispiel können Sie, dass der einzige Schüler, die ein Zertifikat hat, ist derjenige mit StudentID: 111221

Ich bin ganz fest daran. Es muss in einer Abfrage durchgeführt werden, nicht mehrere und ohne Schleifen zu verwenden.

Database diagram overview

Ich habe versucht, die folgenden:

SELECT StudentID, ModuleID<br> 
FROM StudentsModule<br> 
WHERE ModuleID ALL (
    SELECT OnderdeelID 
    FROM CourseModules 
    GROUP BY groupID 
) 

Aber ich bin stecken.

+0

Die meisten Menschen versuchen wollen formatierten Text, keine Bilder (oder Links zu Bildern.) – jarlh

+0

Was Sie versucht haben? Zeigen Sie uns Ihren aktuellen Anfrageversuch. – jarlh

+0

Bitte nicht als Kommentar. Bearbeite stattdessen deine Frage. – jarlh

Antwort

1

dieses hier

select s.studentId, s.moduleId, cc.courseCount, cd.courseDone 
from StudentsModule s 
join CourseModulec on s.moduleId = c.moduleId 
join (select count(*) as courseCount, groupId from CourseModule group by groupId) as cc on cc.groupId = c.groupId 
join (select count(*) as courseDone, studentId from StudentsModule s1 join CourseModule c1 on s1.moduleId = c1.moduleId group by s1.studentId) as cd on cd.studentId = s.studentId 
where cc.courseCount = cd.courseDone 
+0

Danke, das hat mir einen Schritt weitergeholfen. Ich habe jetzt 3000 Ergebnisse, ich musste nur ein paar Dinge ändern, aber du hast mir wirklich gut geholfen! Vielen Dank !!! –

Verwandte Themen