Один из вариантов - агрегация:
select st.studendid, st.lastname, st.firstname
from student st
inner join exam ex on ex.studendid = st.studendid
group by st.studendid, st.lastname, st.firstname
having min(ex.grade) = max(ex.grade) and min(ex.grade) = 'A'
На самом деле, предполагая, что 'A'
является наименее ранжированным по алфавиту, предложение having
можно упростить следующим образом:
having max(ex.grade) = 'A'
Обратите внимание, что вам не нужна таблица subject
, чтобы получить результат, который вы ищете.