2017-10-16 112 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

相关问题