POSTGRESQL:如何过滤生成查询?

时间:2014-10-12 12:42:30

标签: sql postgresql

我有一个教科书问题;列出为表格的每个类别获得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次似乎有点单调乏味。

2 个答案:

答案 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
                  )