POSTGRESQL:如何筛选以产生查询?

问题描述:

我有一个课本问题;列出每个班级的A级和A级人员的ID和姓名;POSTGRESQL:如何筛选以产生查询?

学生{studentID,名} 级{studentID,courseName,等级}

,我不知道如何过滤掉档次,这样我只显示一个学生。 到目前为止,我已经解决

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

你的意思是在所有科目学生A级,也课程表中没有使用FROM – radar 2014-10-12 12:49:53

+0

类对不起这是一个错误,我不知道为什么我写的课程,而不是 – seriallchiller 2014-10-12 12:53:23

+0

级如果'等级'等于'A',它必须与其他任何东西不同。你不需要'!='条件 – 2014-10-12 12:54:53

您可以使用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 
       ) 
+0

此查询将为您提供所有没有成绩的学生。 – 2014-10-12 13:21:09

+0

@IgorRomanchenko,好点,我加入了主要的选择来处理。 – radar 2014-10-12 13:45:35

select studentid, s.name 
from 
    student s 
    inner join 
    grade g using (studentid) 
group by studentid, s.name 
having bool_and(g.grade = 'A')