Я бы использовал пересечение:
select courses.name
from courses
inner join programs on programs.course = courses.name
inner join degrees on degrees.code = programs.degree
where degrees.type = 'UG'
intersect
select courses.name
from courses
inner join programs on programs.course = courses.name
inner join degrees on degrees.code = programs.degree
where degrees.type = 'PG';
Запрос выглядит следующим образом: выберите все курсы для студентов и пересекайте результат с курсами для аспирантов.
Если вы хотите только курсы для студентов, вы можете использовать except
вместо пересечения (обменяйтесь двумя запросами и используйте except
, если вы хотите только курсы для выпускников).