如何选择没有特定关系的所有值?

时间:2015-10-08 01:34:34

标签: mysql sql

我有一个带有Student表的数据库和一个M到M关系的Course表。我需要选择所有没有参加特定课程的学生。我怎么能做这种负面情况呢?

3 个答案:

答案 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)