У меня есть запрос, который извлекает учащихся из шаблона Activity, который является потомком модуля. Некоторые из шаблонов заданий являются сиротами (т. Е. Не имеют родителя модуля в зачислении учащегося), и я хочу определить шаблоны заданий, которые являются осиротевшими, НО, где ученик зачислен в родительский модуль, чтобы я мог заново связать их. Длинный запрос, который у меня до сих пор, показан ниже, и он работает по большей части, он также извлекает осиротевшие шаблоны действий, у которых нет учащегося модуля на зачисление учащегося;
--this first part looks for Activity Template enrolments for a student
select
pers.p_surname
,pers.p_forenames
,s_studentreference
,e_id
,e_start
,e_end
,e_parent
,e_student
,e_module
,e_reference
,e_name
,e_type
from capd_moduleenrolment, capd_student, capd_person pers
where e_type='ACTTMPL'
and e_start>='01-Sep-2019'
and e_student = s_id
and pers.p_id = s_id
and e_parent not in --this clause then looks for that enrolment whose parent does not exist in the following query which retrieves Activity Template enrolments which have a parent
--this sub-query then retrieves Activity Templates with a parent Module enrolment on the student's record
(select
module.e_id
from capd_moduleenrolment template
,capd_student
,capd_moduleenrolment module
where template.e_type='ACTTMPL'
and module.e_type='MOD'
and template.e_start>='01-Sep-2019'
and template.e_student = s_id
and template.e_parent = module.e_id)
--this part of the query below ensures that only the orphaned Activity Template enrolments which are retrieved have a similar reference to the Module enrolment i.e. I trimmed the Module reference so that the query checks the Module reference (before the session code like 15PMUH026-A19/20) against the Activity Template (before the underscore like 15PMUH026_L1) to ensure the student is enrolled on the Module from which the Template has been unlinked.
and SUBSTR (e_reference, 1, INSTR (e_reference, '_') - 1) in
(select SUBSTR(e_reference, 0, LENGTH(e_reference) - 7)
from
capd_student stud
,capd_moduleenrolment moduenrol
WHERE moduenrol.e_student = stud.s_id
AND moduenrol.e_start >='01-Sep-2019'
and MODUenrol.e_status='L'
and moduenrol.e_type='MOD')
order by p_surname
Обратите внимание, чтоПример модуля, который я предоставил, - 15 PMUH026-A19/20, а код сессий - «A19 / 20), выделяющий этот учебный год. Следовательно, дочерним шаблоном деятельности для этого модуля будет 15 PMUH026_L1.
Итак, в двух словах, мне нужно, чтобы мой запрос дал мне список шаблонов действий, в которые зачислен учащийся (в данном случае 15PMUH026_L1), но действиеШаблон не связан с родительским модулем (15 PMUH026-A19/20 в данном случае), НО студент зачислен на оба. По сути, запрос должен искать учеников, зачисленных на шаблон деятельности 15PMUH026_L1 и зарегистрированных на его родительский модуль 15 PMUH026-A19/20 (запрос ищет совпадение, чтобы убедиться, что ссылка на шаблон активности перед подчеркиванием совпадает, а регистрация в модуле - докод сеанса (A19 / 20), где шаблон не связан с родителем.
Заранее благодарен за помощь.
С наилучшими пожеланиями,