ich für Studenten mit
Abwesenheit reason_code = 'DOG_ATE_HOME_WORK'
Suche und das nicht Grund hat 'I_WAS_DRUNK'
in der VergangenheitAbfrage existiert und nicht existiert
Angesichts der Tatsache, dass es Tausende von Studenten und Millionen von Gründen, in der db, ist dies der effizienteste Weg auf mssql gehen?
select student_id from students where
exists(
SELECT 1 FROM absence_reasons absence_r
where absence_r.student_id = students.student_id and
absence_r.reason_code = 'DOG_ATE_HOME_WORK'
)
and not
exists(
SELECT 1 FROM absence_reasons absence_r
where absence_r.student_id = students.student_id
and absence_r.reason_code = 'I_WAS_DRUNK'
)
Ich glaube, Sie müssen Ihre chagne „und nicht existiert“ zu '=‚I_WAS_DRUNK'' –
Doing ein Textvergleich nicht die beste Leistung geben Ihnen geht. Haben diese Tabellen ID-Werte, die Sie vergleichen können? Und hoffentlich ein Index? –
@JacobH Nun, er schaut von der student_id nach oben, so dass es wahrscheinlich zu einer ziemlich kleinen Liste danach gefiltert wird. Bereit zu wetten würde es immer noch gut funktionieren –