1

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

  • 学生- 列: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) )
      );
4

1 回答 1

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。

于 2013-06-13T00:43:43.367 回答