mysql:如何处理3个不同的表,引用每个表中的不同列,但使用主键

gwo2fgha  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(322)

我正在努力找出哪些学校的学生在2018年没有完成考试。我准备了三张table: ExamInfo , ExamEntry 以及 Students . 我要试着用 ExamInfo 表以从 Students 不过,我显然只想要2018年没有完成考试的学生信息。注意:我在找参加过考试的学生,虽然他们没有完成考试,但这次考试你可以把完成的考试看作通过了考试。
ExamInfo 我有专栏:

ExamInfo_Date --when exam took place, using to get year() condition
ExamInfo_ExamNo --unique student exam ID used to connect with other tables
ExamInfo_Completed --1 if completed, 0 if not.
...

ExamEntry 我有相关的专栏:

ExamEntry_ExamNo --connected to ExamInfo table
ExamEntry_StudentId --unique studentId used to connect to Students table
ExamEntry_Date -- this is same as ExamInfo_Date if any relevance.
...

Students 我有以下专栏:

Students_Id --this is related to ExamEntry_StudentId, PRIMARY KEY
Students_School --this is the school of which I wish to be my output.
...

我希望我的输出只是一个名单,所有学校的学生没有完成他们的考试在2018年。尽管我的问题是如何从考卷表中找出那些学生没有完成考试的学校。
到目前为止,我已经:

SELECT a.Students_School, YEAR(l.ExamInfo_Date), l.ExamInfo_Completed
FROM ExamInfo l ??JOIN?? Students a
WHERE YEAR(l.ExamInfo_Date) = 2018
AND l.ExamInfo_Completed = 0
;

我甚至不确定是否要通过 ExamEntry table是必要的。我确信我应该使用join,但不确定如何恰当地使用它。另外,对于我的3个不同的select列,我只希望输出students\u school列:

Students_School
---------------
Applederry
Barnet Boys
...
z6psavjg

z6psavjg1#

显然,你需要一个 JOIN --实际上是两个。您的表包含考试、学生和表示这些实体之间多对多关系的连接/关联表。
所以,我希望 FROM 子句看起来像:

FROM ExamInfo e JOIN
     ExamEntry ee
     ON ee.ExamEntry_ExamNo = e.ExamNo JOIN
     Students s
     ON ee.ExamEntry_StudentId = s.Students_Id

相关问题