MySQL - 选择没有匹配或具有条件的行

时间:2013-06-13 00:27:33

标签: mysql sql select

到目前为止我无法弄清楚这一点,我有这些表:

  • 学生 - 列:id,name
  • stud_class - 列:students_id,class_id
  • - 列:id,courses_id
  • 课程 - 列:id,name

我需要选择 stud_class 表格中没有匹配行的学生那些不属于特定课程类别的学生(给定的课程是一个参数)。

例如:选择没有任何课程的学生或课堂上的课程,但不选择course.id = 2的课程。

到目前为止我这样做了,但它不起作用,查询不返回任何行。我知道这有点令人困惑,但在这种情况下我不知道如何使用JOINS。

SELECT  students.id, students.name 
FROM    students, stud_class, class
WHERE ( NOT (students.id = stud_class.students_id) )
  OR  ( (students.id=stud_class.students.id) AND 
        (stud_class.class_id=class.id) AND 
        ( NOT (class.course_id=2) )
      );

1 个答案:

答案 0 :(得分:2)

如果我正确地解释了您的问题,那么您正在寻找所有不属于某一课程的学生 - 无论他们是否有其他课程。在这种情况下,这有用吗?

SELECT id, name FROM students
WHERE id NOT IN (
    SELECT stud_class.students_id FROM stud_class, class
    WHERE stud_class.class_id = class.id
    AND class.courses_id = 2
)

子查询获得课程2中所有学生的ID(根据您的示例),主查询获取不在该列表中的所有学生的ID。