到目前为止我无法弄清楚这一点,我有这些表:
我需要选择 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) )
);
答案 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。