我有一个带有Student表的数据库和一个M到M关系的Course表。我需要选择所有没有参加特定课程的学生。我怎么能做这种负面情况呢?
答案 0 :(得分:0)
有几种方法:
使用outer join
:
select s.student_id
from student s
left join course c
on s.student_id = c.student_id
and c.course_id = 'xyz'
where c.student_id is null;
使用not exists
子查询:
select student_id
from student s
where not exists (select 1
from course c
where c.student_id = s.student_id
and c.course_id = 'xyz');
使用not in
子查询:
select student_id
from student
where student_id not in (select student_id from course where course_id = 'xyz');
答案 1 :(得分:0)
您可以使用
执行此操作NOT EXISTS和相关子查询;即,选择与特定课程没有关系的所有学生
IN和一个不相关的子查询;即,选择所有不属于与特定课程有关系的学生组的学生
OUTER JOIN和课程名称为NULL的过滤器;即选择所有学生及其与特定课程的关系(如果有的话),并筛选出参加课程的学生。
可能还有其他方法。
答案 2 :(得分:0)
您在寻找此查询吗?
SELECT * FROM Student a WHERE a.M NOT IN (SELECT b.M FROM Course b WHERE)