2013-04-23 23 views
0

所以我试图列出至少在一个类中但不属于组的一部分的学生。我的代码显示0结果,但应该有两个。我的where子句有什么问题。我可以把它展示给学生参加一个或多个班级,只是不能让它显示那些也不属于任何组的人。我的where子句有问题。我有3个相关的表。持有学生姓名和身份证的学生,持有学生ID和团体ID的会员,持有团体ID的学生团体。其中不存在子句sql

代码:

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 
) 

回答

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 
) 
+0

Yupp that worked thanks – user12074577 2013-04-23 20:30:42

1

如果你从where not exists改变where子句where not in?像

where student.id not in (select distinct student_id from member_of)