Найти записи для учащихся, пропускающих занятия - PullRequest
0 голосов
/ 21 мая 2019

У меня есть две таблицы, одна из которых помечает пользователя как прошедшего курс, и список курсов по коду работы. Я пытаюсь запросить, чтобы вернуть запись для всех пользователей, которые пропустили классы.

Вот таблицы:

Attended
--------
empid   jobcode classcode   grade  
555     1       100         A  
555     1       101         A  
444     2       200         A  

JobClassCode
--------
jobcode classcode
1       100
1       101
1       102
2       100
2       200
3       300
3       301

Я начал с этого запроса, чтобы найти классы с отсутствующим пользователем:

select * from attended at
right outer join jobcodeclass jc on at.jobcode = jc.jobcode and at.classcode = jc.classcode

Затем я попытался использовать это для создания коррелированного подзапроса, но не вижу способа вернуть и идентификатор пользователя, и пропущенный идентификатор курса:

select * from jobcodeclass oq where classcode in (select jc.classcode from attended at 
right outer join jobcodeclass jc on at.jobcode = jc.jobcode 
and at.classcode = jc.classcode and jc.jobcode = oq.jobcode 
and oq.classcode = jc.classcode and empid is null)

1 Ответ

1 голос
/ 21 мая 2019

Создайте все возможные классы, которые нужны каждому сотруднику, присоединившись к jobcode. Посмотрите, какие из них посетил студент:

select ej.empid, ej.jobcode, jss.classcode
from (select distinct empid, jobcode from attended) ej join
     JobClassCode jcc
     on jcc.jobcode = ej.jobcode left join
     attended a
     on a.empid= e.empid and a.jobcode = ej.jobcode and
        a.classcode = jcc.classcode
where a.empid is null;

Если вам просто нужны сотрудники, используйте select distinct ej.empid.

...