[英]Help with SQL join combined with lots of subqueries
我在加入方面的经验有限,这个难题困扰了我。
这是我的mysql数据库中的相关表:
我的目标:检索在给定日期安排考试的部分中所有已注册的学生。 还获得学生在给定日期必须参加的每项考试的考试时间表信息。 希望在每个学生考试时间表对的结果集中有一行。
我有一个查询可以完成我的目标的前一半(它有很多子查询):
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))))
我不知道的是如何将联接合并到其中,以实现目标的后半部分。 我的每一次尝试都产生了语法错误。 拜托,有人能指出我正确的方向吗? 提前致谢!
您可以使用联接完成所有操作,从而以以下方式获取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
这是一个镜头:
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')
加入就像写出您的想法。
我要学生,也要各节的学生,我要各节的考试,我要根据考试时间表对考试时间表进行过滤,并以此方式进行考试...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.