2013-04-23 21 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)