Ich habe eine Datenbank, die Prüfungsaufzeichnungen speichert: tbl_exams
speichert die ID und den Namen der Prüfungen - es gibt nur 9 Prüfungen und so nur 9 Datensätze in dieser Tabelle als Prüfungen sind festgelegt und ändern sich nicht. tbl_exam_details
speichert alle Details für einen Prüfungseintrag und enthält die entsprechende ID aus tbl_exams
- dafür gibt es eine Fremdschlüsseleinschränkung. Was ich versuche, ist eine Abfrage erstellen, die nur Zeilen zurückgibt, wenn alle 9 Prüfungen von einem bestimmten Studenten genommen wurden und das pass_or_fail
Feld ist '1' - ich verwende tinyint(1)
, um 1 zu speichern, die pass ist, oder 0, die fehlschlägt). Dies ist im Wesentlichen zu überprüfen, ob alle 9 Prüfungen bestanden wurden.MySQL - Zeilen nur zurückgeben, wenn alle Werte in der WHERE-Klausel vorhanden sind
Das ist, was ich bisher habe, ist es jedoch Reihen, auch wenn der Student Rückkehr nur eine oder zwei Prüfungen abgeschlossen hat:
SELECT tbl_exam_details.student_id, exam_name, exam_date, pass_or_fail FROM tbl_exam_details
INNER JOIN tbl_exams ON tbl_exams.exam_id = tbl_exam_details.exam_id
WHERE student_id = 1 AND pass_or_fail = 1
AND tbl_exam_details.exam_id IN (1, 2, 3, 4, 5, 6, 7, 8, 9)
ORDER BY exam_details_id
Was ich brauche, ist für die Abfrage nur die Zeilen zurück, sobald alle 9 Prüfungen wurden bestanden. Wenn ein Schüler also 8 Prüfungen bestanden hat, sollte die Abfrage 0 Zeilen zurückgeben. Wenn mir jemand helfen könnte, wäre ich sehr dankbar.
Können Sie Ihre Frage bearbeiten und Beispieldaten und gewünschte Ergebnisse bereitstellen? –
Sie könnten eine 'all_exams'-Spalte erstellen, die automatisch aktualisiert wird, wenn die Tabelle geändert wird. all_exams = 1 wenn alle exam_id gesetzt sind, sonst 0. – nncho