Udover det faktum, at du bruger forældet implicit kommasyntaks til joinforbindelser, kombinerer du også kolonner i tabellerne på den forkerte måde i underforespørgslen.
subject_name
er en kolonne med subject
som ikke har noget at gøre med elevens forhold til karakterer. Så karakter kan sammensættes separat med emne, mens student_id'erne med højeste karakter bestemmes. Vi kan derefter få navnet på eleven ved at bruge disse student_id'er
Så i Oracle 12c og nyere kunne du gøre
SELECT s.student_name
FROM student s
WHERE s.student_id IN ( SELECT m.student_id
FROM mark m JOIN subject su
ON su.subject_id = m.subject_id
WHERE lower(su.subject_name) = 'software engineering'
ORDER BY m.value DESC
FETCH FIRST 1 ROWS WITH TIES ) order by 1;
For tidligere versioner kan du bruge dense_rank
eller rank
SELECT s.student_name
FROM student s
WHERE s.student_id IN ( SELECT student_id
FROM ( SELECT m.*,DENSE_RANK() OVER(
ORDER BY m.value DESC
) AS rnk
FROM mark m JOIN subject su
ON su.subject_id = m.subject_id
WHERE lower(su.subject_name) = 'software engineering'
) WHERE rnk = 1
) order by 1;