Начиная с первого запроса, который показывает все шаги, связанные с EVAL, вы можете ВНЕШНЕЕ СОЕДИНЕНИЕ присоединиться ко второму запросу, и шаги с нулевым значением в правой части запроса будут теми, у которых пропущены оценки.
Для этого в ваших таблицах должен быть какой-то способ связать Grading
с Evals
. Этот столбец не виден из кода, который вы разместили, но я предполагаю, что он есть. Может быть, это через GradingCats
.
В сокращенном псевдо-коде, просто чтобы показать, что я имею в виду:
SELECT ...
FROM Evals e
INNER JOIN Steps s ON e.TemplateID = s.TemplateID
LEFT OUTER JOIN Grading g ON g.EvalID = e.EvalID --use whatever means you have to show which Eval a Grade is from
LEFT OUTER JOIN Steps gs ON {join to Grading through GradingCats as in your second query}
WHERE gs.StepID IS NULL
При анализе результата этого запроса все шаги каждого Eval будут находиться в s.StepID
, а когда в той же строке задано значение NULL для gs.StepID
, это означает, что шаг не получил оценку.
Обратите внимание, что вы не захотите выполнять какие-либо операции GROUP BY в этом запросе, поскольку вам требуется анализ на уровне строк.