2013-04-23 2 views
0

Итак, я пытаюсь перечислить студентов, которые находятся хотя бы в одном классе, но не являются частью группы. Мой код показывает 0 результатов, но должно быть два. Что-то не так с моим предложением where. Я могу заставить его показать ученикам, принимающим один или несколько классов, просто не получив его, чтобы показать те, которые также не являются частью какой-либо группы. Что-то не так с моим предложением where. У меня есть 3 таблицы, которые связаны между собой. Студент, который держит имя студента и идентификатор, член, который содержит идентификатор студента и идентификатор группы, и студенческую группу, которая содержит идентификатор группы.где не существует предложение 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, который работал благодаря – user12074577

1

, что если вы изменили где положение с where not exists в where not in? что-то вроде

where student.id not in (select distinct student_id from member_of) 
Смежные вопросы