首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将表右连接到自身SQL

问将表右连接到自身SQL
EN

Stack Overflow用户
提问于 2016-07-30 04:18:05
回答 5查看 58关注 0票数 3

这可能真的很基础,但我被卡住了!

我有两个表,一个显示学生所在的班级,另一个显示每个学生的成绩。我想找出特定班级中哪些学生没有成绩。

我写了这段代码作为起点,它查找班级中确实有成绩的学生的列表:

代码语言:javascript
复制
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

这是一种享受,但我真正需要的是班上没有成绩的学生,而不是有成绩的学生。我认为我可以正确连接成员资格表,如下所示,但它不起作用:

代码语言:javascript
复制
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 right joins示例来达到上述目的。我猜这是因为“mem.student_id is null”条款不起作用,但谷歌上所有的小抄都说我需要它。

请帮帮我!我是SQL (和一般的编码)的新手,所以这可能是非常基础的,但是我在任何地方都找不到答案。谢谢:)

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-07-30 04:23:54

你可能根本不需要3-way join:

代码语言:javascript
复制
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已经列出了所有的学生,所以您只需要找出哪些学生没有成绩,这意味着他们的“成绩”条目将为空。

票数 1
EN

Stack Overflow用户

发布于 2016-07-30 04:23:35

实际上,你真的只需要在grades上做一个LEFT JOIN。无论是否存在相应的class_memberships记录,LEFT JOINs都将显示所有的grades记录。然后,您可以过滤掉没有成绩的记录

代码语言:javascript
复制
SELECT mem.student_id, mem.class_id
FROM class_memberships as mem
LEFT JOIN grades as gr ON mem.student_id = gr.student_id
WHERE mem.class_id = 12
AND gr.id IS NULL --I'm not sure what your pk field is for your grades table
票数 1
EN

Stack Overflow用户

发布于 2016-07-30 04:23:42

代码语言:javascript
复制
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.student_id NOT EXISTS (select student_id from class_memberships where class_membership is null)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38666855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档