where not clause子句sql

时间:2013-04-23 20:13:52

标签: sql not-exists

所以我试图列出至少在一个班级但不属于某个班级的学生。我的代码显示0结果,但应该有两个。我的where子句出了点问题。我可以让它向学生展示参加一个或多个课程,但是不能让它显示那些也不属于任何一个团体的学生。我的where子句有问题。我有3个相关的表。持有学生姓名和身份证件的学生,持有学生证和团体证的会员,以及持有团体ID的学生团体。

代码:

select student.lastname
from student inner join enrolled on enrolled.studentid = student.sid
where not exists(
select *
from studentgroup inner join memberof on memberof.groupid = studentgroup.gid 
)

2 个答案:

答案 0 :(得分:1)

如果您将where子句从where not exists更改为where not in怎么办?

之类的东西
where student.id not in (select distinct student_id from member_of)

答案 1 :(得分:1)

您没有任何条件说明学生将如何与学生群体联系。因此,EXISTS始终返回true,但您希望查看EXISTS返回false的行。

您可以在子查询中添加WHERE,以将学生与群组相关联。

SELECT student.lastname
FROM student INNER JOIN enrolled ON enrolled.studentid = student.sid
WHERE NOT exists(
SELECT *
FROM studentgroup INNER JOIN memberof ON memberof.groupid = studentgroup.gid
WHERE student.sid = memberof.studentid
)