Предположительно, вы хотите, чтобы инструкторы обучались только один раз в 2009 году.
Если это так, вы могли бы сделать:
select id, name, dept_name, salary
from instructor i
where (select count(*) from teaches t where i.id = t.instructor_id and t.year = 2009) = 1;
Я бы ожидал, что таблица teaches
имеет instructor_id
столбец вместо id
, относящийся к instructor(id)
.
Другой вариант использует агрегирование:
select i.id, i.name, i.dept_name, i.salary
from instructor i
inner join teaches t on t.instructor_id = i.id and t.year = 2009
group by i.id, i.name, i.dept_name, i.salary
having count(*) = 1