我对加入的经验有限,而这个难题让我很难过。
以下是我的mysql数据库中的相关表:
我的目标:检索所有在指定日期安排了考试的部分注册的学生。同时获取学生在给定日期必须参加的每项考试的考试安排信息。希望在每个学生< - > exam_schedule对的结果集中有一行。
我有一个查询来完成我的目标的前半部分(它有很多子查询):
SELECT * FROM `students` WHERE `id` IN
(SELECT `student_id` FROM `sections_students` WHERE `section_id` IN
(SELECT `section_id` FROM `sections_exams` WHERE `exam_id` IN
(SELECT `exam_id` FROM `exam_schedules` WHERE `date` = DATE('$date') AND `exam_id` IN
(SELECT `id` FROM `exams` WHERE `isAutoSignup` = 1))))
我无法弄清楚如何将联接纳入其中以实现目标的后半部分。我的每一次尝试都产生了语法错误。拜托,有人能指出我正确的方向吗?提前谢谢!
答案 0 :(得分:3)
你可以用连接完成所有这些,从而获得exam_schedules
的方式:
SELECT s.*, es.*
FROM students s
JOIN sections_students ss on s.id = ss.student_id
JOIN sections_exams se on se.section_id = ss.section_id
JOIN exam_schedules es on es.exam_id = se.exam_id and date = DATE('$date')
JOIN exams e on e.id = es.exam_id and isAutoSignup = 1
答案 1 :(得分:0)
这是一个镜头:
SELECT S.Student_name, E.Exam_name, ES.date
FROM students S
LEFT OUTER JOIN SECTIONS_STUDENTS SS
ON SS.student_id = S.stuent_id
LEFT OUTER JOIN SECTIONS_EXAMS SE
ON SE.section_id = SS.section_id
LEFT OUTER JOIN EXAMS E
ON E.exam_id = SE.exam_id
LEFT OUTER JOIN EXAM_SCHEDULES ES
ON ES.exam_id =E.exam_id
WHERE 1=1
AND E.isAutoSignup = 1
AND ES.Date = DATE('$date')
加入就像写出你的想法一样。
我想要学生 我希望学生分段 我希望这些部分的考试 我想要考试的时间表 以这种方式过滤考试时间表和考试......