0

所以我试图列出至少在一个班级但不属于一个小组的学生。我的代码显示 0 个结果,但应该有两个。我的 where 子句有问题。我可以让它显示学生参加一门或多门课程,但不能让它显示那些也不属于任何小组的学生。我的 where 子句有问题。我有 3 个相关的表。持有学生姓名和ID的Student,持有学生ID和组ID的Member of,持有组ID的studentgroup。

代码:

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 
)
4

2 回答 2

1

如果将 where 子句从 更改where not existswhere not in怎么办?就像是

where student.id not in (select distinct student_id from member_of)
于 2013-04-23T20:18:40.267 回答
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
)
于 2013-04-23T20:19:35.533 回答