2017-10-16 111 views
0

表:Access查詢查找所有記錄所有鏈接的記錄匹配

tblStudents: 
ID, Student Name 
1, John 
2, Mark 
3, Fred 

tblEnrolledSubjects: 
ID, Student ID, Subject ID, Score 
1, 1, 1, 75 
2, 1, 2, 75 
3, 1, 3, 75 
4, 1, 4, NULL 
5, 2, 1, 75 
6, 3, 1, 75 
7, 3, 2, 80 
8, 3, 3, 85 

tblSubject: 
ID, Subject Name 
1, Maths 
2, English 
3, Science 
4, History 

我想回到那個有一個得分超過(比方說70),所有科目的所有不同的學生。選擇[學生姓名]

學生可以參加1個或多個科目。 如果一個學生甚至有一個科目沒有達到要求的分數,那麼他們就不應該被列出來。

從他上面的數據我希望看到

Mark 
Fred 

將SQL查詢是什麼呢?

回答

0

如果NULL值不計入你,那麼

SELECT tblStudents.[Student Name] 
FROM tblEnrolledSubjects RIGHT JOIN tblStudents 
    ON tblEnrolledSubjects.[Subject ID] = tblStudents.ID 
GROUP BY tblStudents.[Student Name] 
HAVING (Min(tblEnrolledSubjects.[Score])>=70); 
0
SELECT t.Studentname 
    FROM tblStudents t JOIN 
     (select count(*) cnt, min(nz(score,0)) minscore, StudentID 
     FROM tblEnrolledSubjects 
    GROUP BY StudentID) s 
    ON t.Studentid = s.studentid 
WHERE minscore>=70 --if mark is greater than or equal to 70 
+0

,但如果學生在三類唯一入選(但是有好成績在所有三個),你的SQL將他排除在外從結果來看,僅僅是因爲他沒有參加所有五個班級。我不確定這是否是意圖。我會刪除WHERE條款的那一部分。 – xpofer

+0

是的,如果這並不重要,那麼我們必須刪除檢查計數的where子句 – Valli

相關問題