2017-08-17 3 views
1

Ich versuche, alle mit oder ohne Noten des Schülers mit Methode NOT IN und IN zu filtern. Ich benutzte NOT IN bei der Auswahl von leeren Noten für Schüler, während für IN ich die Schüler mit der Note auswählen. Ist es möglich, sie alle in eine Abfrage anstatt in zwei Abfragen zu setzen? Weil ich sie alle gleichzeitig auswählen und dann irgendwo in meiner Klasse anrufen wollte.Mit NOT IN und nicht zur gleichen Zeit

Abfrage für 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; 

Abfrage für 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

Ich denke, '' 'VERLASSEN JOIN'''could nützlich sein für Sie –

+1

@Gunslinger_' LINKS JOIN' der Trick. : p – Francisunoxx

+0

Gern geschehen :) bitte habe meine Antwort unten angeschaut. Sieht es so aus? Wenn ja, bitte als Antwort markieren. –

Antwort

1

Also versuche ich, meine Antwort hier neben meinem Kommentar zu schließen. Ich denke, die Abfrage würde so aussehen mit LEFT JOIN, die Sie alle Daten mit oder ohne Noten filtern müssen.

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' hat es geschafft. Ich lehrte, dass ich zwei Methoden gleichzeitig beitreten kann :) – Francisunoxx

Verwandte Themen