簡體   English   中英

列中的值的mySQL條件未發生

[英]mySQL condition of a value in a column not occuring

我的想法是,我需要列出所有從未失敗過的學生,其中包括尚未參加任何考試的學生。 幾點:

studentId是學生的唯一ID。
studentLastname顯然是學生的姓氏。
examEntryStudentId是學生的唯一ID外鍵。
examEntryNumber是學生的唯一考試編號。
examInfoNumber相同,但在ExamInfo表上。
examInfoPassed確定學生是否通過; 1表示學生通過(50%以上),0表示學生失敗。

這個想法是我遍歷從StudentExamEntryExamInfo的表。 我希望首先選擇所有學生,因為較年輕的學生還沒有參加過官方考試,因此我在使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM