我有一个教科书问题;列出为表格的每个类别获得A成绩的人员的ID和名称;
学生{studentID,姓名} 成绩{studentID,courseName,grade}
我不知道如何筛选成绩,以便我只向A学生展示。 到目前为止我有解决方案
SELECT Student.studentID, Student.name
FROM Student, Grade
WHERE Student.studentID = Grade.StudentID AND
Grade.grade = 'A' AND
Grade.grade != 'B' AND
Grade.grade != 'C' AND
Grade.grade != 'D' AND
Grade.grade != 'F';
我是否可以使用更清洁的方式过滤此内容。我写了不等于4次似乎有点单调乏味。
答案 0 :(得分:2)
select studentid, s.name
from
student s
inner join
grade g using (studentid)
group by studentid, s.name
having bool_and(g.grade = 'A')
答案 1 :(得分:1)
您可以使用NOT EXISTS
课程。我们正在让所有没有得到A的学生过滤掉。
SELECT DISTINCT Student.studentID, Student.name
FROM Student
JOIN Grade
ON Student.studentId = Grade.studentId
WHERE NOT EXISTS ( SELECT 1 FROM Grade G
WHERE G.grade !='A'
and G.studentID = Student.studentID
)