Sugeriría usar la agregación:
SELECT `Reg.No`, SubjectCode, SUM(`Pass/Fail` = 'Pass')
FROM results
GROUP BY `Reg.No`, SubjectCode
HAVING SUM(`Pass/Fail` = 'Pass') = 0;
El HAVING
La cláusula cuenta el número de resultados para cada estudiante y curso donde la última columna es 'Pass'
. En MySQL, los valores booleanos se tratan como enteros en un contexto numérico, siendo verdadero 1. Entonces, sum(
Pasa/Falla= 'Pass')
cuenta el número de veces que un estudiante aprobó el curso. El = 0
dice que el estudiante nunca aprobó el curso.
Como sugerencia, no ponga caracteres especiales como /
y .
en los nombres de las columnas. Eso requiere escapar de las columnas y solo hace que el código sea más difícil de escribir porque está lleno de acentos graves.