我在我的数据库中有上面提到的表。我首先从我以前的PHP页面收到一个COURSE变量。我需要打印学生姓名列表以及未参加课程的student_Ids。对于上面的表格,如果我收到的变量是A,那么我需要打印Jake和他的student_id。由于杰克的学生成绩3,与课程A没有关联。
我尝试了以下查询,这似乎不起作用,我不确定我错在哪里
SELECT DISTINCT T1.name, T1.student_id
FROM Table 1 T1, Table 2 T2
WHERE T1.student_id = T2.student_id AND
T2.COURSE != :variable
ORDER BY T1.name ASC,
T1.student_id ASC
变量:A
我很欣赏这一点看起来很老式,但话又说回来,我也是......
SELECT DISTINCT x.*
FROM t1 x
LEFT
JOIN t2 y
ON y.student_id = x.student_id
AND y.course = 'a'
WHERE y.student_id IS NULL;
有很多选择。例如,您可以使用子查询:
SELECT name, student_id FROM t1 WHERE student_id NOT IN (SELECT student_id FROM t2 WHERE course='A')
您可以使用NOT EXISTS
查找未参加课程的学生列表:
SELECT * FROM T1
WHERE NOT EXISTS (
SELECT * FROM T2
WHERE T1.StudentId = T2.StudentId
AND T2.Course = :variable
)
ORDER BY name ASC, student_id