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查询是什么呢?
答
如果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);
答
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
,但如果学生在三类唯一入选(但是有好成绩在所有三个),你的SQL将他排除在外从结果来看,仅仅是因为他没有参加所有五个班级。我不确定这是否是意图。我会删除WHERE条款的那一部分。 – xpofer
是的,如果这并不重要,那么我们必须删除检查计数的where子句 – Valli