这可能很基础但我卡住了!
我有两个表,一个表显示学生在哪些班级,另一个表则显示每位学生所获得的成绩。我想要找出特定班级中没有成绩的学生。
我写了下面这段代码作为起点,它可以找到某个班级里已经有成绩的学生列表:
SELECT mem.student_id, mem.class_id
FROM class_memberships as mem
inner join grades as gr
on mem.student_id = gr.student_id
where mem.class_id = 12 and gr.grade_type = 18
那个方法很有效,但我实际需要的是班级中没有成绩的学生,而不是有成绩的学生。我想我可以按如下方式对成员表进行右联接,但没成功:
SELECT mem.student_id, mem.class_id
FROM class_memberships as mem
inner join grades as gr
on mem.student_id = gr.student_id
right join class_memberships as mem2
on mem.student_id = mem2.student_id
where mem.class_id = 12 and gr.grade_type = 18
and mem.student_id is null
上述查询没有返回任何行,我知道有一个学生没有成绩。我参考了谷歌上的SQL右连接示例得出了以上结果。我猜这不起作用是因为"mem.student_id is null"子句,但是所有谷歌上的提示说我需要它。请帮帮我!我对SQL(和编程一般)还是新手,所以这可能非常基础,但我无法在任何地方找到答案。谢谢 :)
RIGHT JOIN
。LEFT JOIN
是可以用的...但通常如果我们想使用RIGHT JOIN
,我们会重写成LEFT JOIN
。从最小的表开始查找所需内容。 - SQLMason