Sugiro usar agregação:
SELECT `Reg.No`, SubjectCode, SUM(`Pass/Fail` = 'Pass')
FROM results
GROUP BY `Reg.No`, SubjectCode
HAVING SUM(`Pass/Fail` = 'Pass') = 0;
O
HAVING
cláusula conta o número de resultados para cada aluno e curso onde a última coluna é 'Pass'
. No MySQL, os booleanos são tratados como inteiros em um contexto numérico, com true sendo 1. Então, sum(
Aprovado/Reprovado= 'Pass')
conta o número de vezes que um aluno passou no curso. O = 0
diz que o aluno nunca passou no curso. Como sugestão, não coloque caracteres especiais como
/
e .
nos nomes das colunas. Isso requer o escape das colunas e apenas torna o código mais difícil de escrever porque está cheio de acentos graves.