[英]mySQL condition of a value in a column not occuring
我的想法是,我需要列出所有從未失敗過的學生,其中包括尚未參加任何考試的學生。 幾點:
studentId
是學生的唯一ID。
studentLastname
顯然是學生的姓氏。
examEntryStudentId
是學生的唯一ID外鍵。
examEntryNumber
是學生的唯一考試編號。
examInfoNumber
相同,但在ExamInfo
表上。
examInfoPassed
確定學生是否通過; 1表示學生通過(50%以上),0表示學生失敗。
這個想法是我遍歷從Student
到ExamEntry
到ExamInfo
的表。 我希望首先選擇所有學生,因為較年輕的學生還沒有參加過官方考試,因此我在使用LEFT JOIN
以便所有學生都被選中,否則他們將不會像原來那樣出現。由於並非所有學生都參加了考試,因此未包含在examEntryStudentId
中。 此外,然后使用ExamEntry
表遍歷到ExamInfo
表,在該表中存儲學生是否通過了考試的數據。 此數據存儲在examInfoPassed
下,因此,如果某個學生在examInfoPassed
的值曾經為0
,則意味着他們應該是我輸出中未包括的唯一學生。
這是我的初始代碼:
SELECT DISTINCT l.studentId, l.studentLastname
FROM Students l
LEFT JOIN ExamEntry e
ON l.studentId = e.examEntryStudentId
JOIN ExamInfo a
ON e.examEntryNumber = a.examInfoNumber
WHERE NOT a.examInfoPassed = 0
;
盡管我目前的輸出是所有通過考試的學生,包括以前未通過考試的學生。 我不確定如何創建條件,這意味着如果您屬於NOT a.examInfoPassed = 0
的類別, NOT a.examInfoPassed = 0
從輸出NOT a.examInfoPassed = 0
其刪除。 同樣,未參加任何考試的學生也未包含在我的輸出中。
根據您的sql代碼,當前您的查詢報告至少已通過考試的所有學生,而您希望已通過所有考試的學生 。 另外,由於WHERE
子句引用了來自JOINed表的列,因此未通過任何考試的學生也被排除在外。
您需要更改邏輯:
使用LEFT JOIN
來檢測那些至少通過了一次考試的人
然后將其排除在WHERE
子句中(與此同時,這將使從未參加過考試的學生被包含在輸出列表中)。
查詢:
SELECT DISTINCT l.studentId, l.studentLastname
FROM Students l
LEFT JOIN ExamEntry e ON l.studentId = e.examEntryStudentId
LEFT JOIN ExamInfo a ON e.examEntryNumber = a.examInfoNumber AND a.examInfoPassed = 0
WHERE a.examInfoNumber IS NULL
改用聚合:
SELECT l.studentId, l.studentLastname
FROM Students l LEFT JOIN
ExamEntry e
ON l.studentId = e.examEntryStudentId LEFT JOIN
ExamInfo a
ON e.examEntryNumber = a.examInfoNumber
GROUP BY l.studentId, l.studentLastname
HAVING MIN(a.examInfoPassed) = 0 OR MIN(a.examInfoPassed) IS NULL;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.