2017-08-17 75 views
1

我试图过滤所有的使用或不使用方法NOT ININ学生的成绩。选择学生成绩的空当而IN我选择学生的年级,我使用NOT IN。是否有可能将它们全部置于一个查询中而不是两个查询中?因为我想在同一时间选择他们,然后在我班的某个地方打电话。使用NOT IN,而不是在同一时间

查询为IN

SELECT subject_mt.subject_id, student_mt.student_id, 
    registration_mt.firstname, registration_mt.middlename, registration_mt.lastname, 
    subject_mt.title, 
    MAX(IF(g.gradingperiod_id = 7000, g.grade, ""))AS first, 
    MAX(IF(g.gradingperiod_id = 7001, g.grade, "")) AS second, 
    MAX(IF(g.gradingperiod_id = 7002, g.grade, "")) AS third, 
    MAX(IF(g.gradingperiod_id = 7003, g.grade, "")) AS fourth, 
    g.final 

FROM faculty_schedule 
INNER JOIN schedule_mt ON schedule_mt.schedule_id = faculty_schedule.schedule_id 
INNER JOIN section_mt ON section_mt.section_id = schedule_mt.section_id 
INNER JOIN section_student ON section_student.section_id = section_mt.section_id 
INNER JOIN student_mt ON student_mt.student_id = section_student.student_id 
INNER JOIN registration_mt ON registration_mt.registration_id = student_mt.registration_id 
INNER JOIN subject_mt ON subject_mt.subject_id = schedule_mt.subject_id 
INNER JOIN student_grade AS sg ON sg.student_id = student_mt.student_id 
INNER JOIN grade AS g ON g.grade_id = sg.grade_id 


//WHERE CLAUSE HERE 

GROUP BY 
subject_mt.subject_id, student_mt.student_id, 
registration_mt.firstname, registration_mt.middlename, registration_mt.lastname, 
subject_mt.title, 
g.final; 

查询为NOT IN

INNER JOIN student_grade AS sg ON sg.student_id = student_mt.student_id 
INNER JOIN grade AS g ON g.grade_id = sg.grade_id 

WHERE faculty_schedule.faculty_id = pIN_facultyId 
AND schedule_mt.section_id = pIN_sectionId 
AND sg.student_id IN (SELECT student_id FROM student_grade) 
+0

我想,'''LEFT JOIN'''could是你 –

+1

@Gunslinger_'LEFT JOIN'的伎俩是有用的。 :p – Francisunoxx

+0

不客气:)请看下面我的答案。它看起来像那样吗?如果是这样,请将其标记为已回答。 –

回答

1

所以我想在这里结束我的评论旁边我的答案。我想查询将看起来像这样利用LEFT JOIN这是你需要有或无等级过滤所有数据。

SELECT subject_mt.subject_id, student_mt.student_id, 
    registration_mt.firstname, registration_mt.middlename, registration_mt.lastname, 
    subject_mt.title, 
    MAX(IF(g.gradingperiod_id = 7000, g.grade, ""))AS first, 
    MAX(IF(g.gradingperiod_id = 7001, g.grade, "")) AS second, 
    MAX(IF(g.gradingperiod_id = 7002, g.grade, "")) AS third, 
    MAX(IF(g.gradingperiod_id = 7003, g.grade, "")) AS fourth, 
    g.final 

FROM faculty_schedule 
INNER JOIN schedule_mt ON schedule_mt.schedule_id = faculty_schedule.schedule_id 
INNER JOIN section_mt ON section_mt.section_id = schedule_mt.section_id 
INNER JOIN section_student ON section_student.section_id = section_mt.section_id 
INNER JOIN student_mt ON student_mt.student_id = section_student.student_id 
INNER JOIN registration_mt ON registration_mt.registration_id = student_mt.registration_id 
INNER JOIN subject_mt ON subject_mt.subject_id = schedule_mt.subject_id 
LEFT JOIN student_grade AS sg ON sg.student_id = student_mt.student_id 
LEFT JOIN grade AS g ON g.grade_id = sg.grade_id 

WHERE faculty_schedule.faculty_id = pIN_facultyId 
AND schedule_mt.section_id = pIN_sectionId 
AND sg.student_id IN (SELECT student_id FROM student_grade) 

GROUP BY 
subject_mt.subject_id, student_mt.student_id, 
registration_mt.firstname, registration_mt.middlename, registration_mt.lastname, 
subject_mt.title, 
g.final; 
+0

'LEFT JOIN'完成了这个诀窍。我教过我可以同时加入两种方法:) – Francisunoxx

相关问题