所以我试图列出至少在一个班级但不属于某个班级的学生。我的代码显示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
)
答案 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
)