У меня есть четыре таблицы значений: инструкторы, сертификаты, block_subjects и блоки и две таблицы отношений: instructor_certification и subject_certification.Например:
block -- block_subject
|
|
subject_certification
|
|
certification
|
|
instructor_certification
|
|
instructor
Я хочу запрос, который скажет мне, для каждого блока , который инструкторы имеют право обучать блок.В частности, я не хочу указывать идентификатор блока как часть запроса;Я хочу выбрать несколько блоков на основе разных критериев.
Вот (нерабочий) запрос, который у меня сейчас есть:
select inst.name, inst.id
from instructor as inst
join instructor_certification as ic on inst.id = ic.instructor_fid and
ic.certification_fid = all (
select cert.id
from block_subject as bs
join subject_certification as bsc on bsc.block_fid = bs.id
join certification as cert on bsc.certification_fid = cert.id
where bs.id = any (
select bs.id
from block as b
join block_subject as bs on b.subject_fid = bs.id
where (b.start_date, b.end_date) overlaps (?, ?)
)
)
Очевидно, это не работает, потому что 'all 'собирает все сертификаты, необходимые для каждого block_subject в диапазоне дат.
Редактировать: Кроме того, я должен был уточнить, что на самом деле требуется несколько сертификатов для block_subject.