Как получить строки, не представленные в отношениях «многие ко многим»? - PullRequest
3 голосов
/ 20 сентября 2011

У меня есть отношения многие ко многим между учениками и классами, как показано ниже.Я хотел бы получить идентификаторы всех студентов, которые не зарегистрированы ни в каких классах.

many-to-many relationship

Из-за размера набора данных я бы хотел не использовать НЕВ.Есть ли более эффективное решение?

Ответы [ 5 ]

8 голосов
/ 20 сентября 2011

НЕ СУЩЕСТВУЕТ, чтобы дать вам лучшую производительность.См. Левое внешнее соединение против НЕ СУЩЕСТВУЕТ для получения более подробной информации.

SELECT s.StudentID
    FROM student s
    WHERE NOT EXISTS(SELECT NULL
                         FROM student_class sc
                         WHERE sc.StudentID = s.StudentID)
1 голос
/ 20 сентября 2011

Вы также можете использовать

SELECT StudentID
FROM student 
EXCEPT
SELECT  StudentID
FROM student_class
1 голос
/ 20 сентября 2011

Следующий запрос на соединение может привести к ответу

 SELECT student.id
 FROM student
 LEFT JOIN student_class ON student.studentid = student_class.studentid
 WHERE student_class.studentid IS NULL
1 голос
/ 20 сентября 2011

Альтернативой является использование левого соединения:

SELECT s.student_id
FROM student s
LEFT JOIN student_class sc ON (sc.student_id = s.student_id)
WHERE sc.student_id IS NULL
1 голос
/ 20 сентября 2011
select * from student
left join student_class on student_class.studentid = student.studentid
where student_class.scid is null;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...