Просто чтобы показать альтернативу: вы можете собрать все публикации (тезисы, конференции и журналы), а затем объединить их, чтобы найти людей, которые за один год опубликовали свои тезисы, плюс конференции или журналы.
with published as
(
select akey, type, year from theses where type = 'PhD'
union all
select ap.akey, 'conference', c.year
from authpapers ap
join papers p on p.pkey = ap.pkey
join conferences c on c.ckey = p.ckey
union all
select ap.akey, 'journal', j.year
from authpapers ap
join papers p on p.pkey = ap.pkey
join journals j on c.jkey = p.jkey
)
select *
from persons
where akey in
(
select akey
from published
group by akey, year
having bool_or(type = 'PhD')
and not ( bool_or(type = 'conference') or bool_or(type = 'journal') )
)
order by akey;
Агрегация bool_or
может читаться как «по крайней мере один» или «любой».
Мы не знаем, допускает ли ваша база данных один и тот же документ, выпущенный как для заседаний, так и для конференций. Или может ли человек иметь несколько кандидатских диссертаций (может быть, несколько попыток?). Над запросом рассматриваются все годы, когда человек что-то публиковал, и если он обнаружил, что хотя бы один год человек опубликовал диссертацию на соискание ученой степени кандидата наук и журналы или конференции, он показывает этого человека.