这可能是非常基本的,但我被卡住了!
我有两张表,一张显示学生所在的类(class),另一张显示每个学生的成绩。我想找出特定类(class)中哪些学生没有成绩。
我写了这段代码作为起点,它会找到一个类(class)中确实有成绩的学生列表:
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
这是一种享受,但我真正需要的是类没有成绩的学生,而不是有成绩的学生。我以为我可以按如下方式加入成员(member)表,但它不起作用:
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
以上不返回任何行,我知道一个学生没有成绩。我按照 google 上的示例进行 SQL 右连接以达到上述目的。我想这不起作用,因为“mem.student_id is null”子句,但谷歌上的所有备忘单都说我需要它。
请帮助!我是 SQL 的新手(以及一般的编码),所以这可能真的很基础,但我在任何地方都找不到答案。谢谢 :)
最佳答案
您可能根本不需要 3 向连接:
SELECT student_id
FROM class_membership
LEFT JOIN grades ON (class_membership.student_id = grades.student_id
AND class_membership.class_id = grades.class_id)
WHERE grades.student_id IS NULL
class_membership
已经列出了所有学生,所以你只需要弄清楚哪些学生没有成绩,这意味着他们该类(class)的“成绩”条目将为空。关于sql - 将表右连接到自身 SQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38666855/