Хорошо, вам нужно СОЕДИНИТЬ все три таблицы с таблицей trainingRecords посередине, поскольку в ней есть столбцы, необходимые для связи двух других таблиц.Ваш запрос будет выглядеть примерно так:
SELECT E.lName, E.fName, ML.docName, ML.docNumber FROM
(employees E LEFT OUTER JOIN trainingRecords TR ON E.empID = TR.empID)
RIGHT OUTER JOIN masterList ML ON ML.TID = TR.TID
WHERE TR.TID IS NULL
Что здесь происходит?
Во-первых, вы делаете ЛЕВОЕ НАРУЖНОЕ СОЕДИНЕНИЕ сотрудников и trainingRecords.LEFT OUTER - убедиться, что все записи сотрудников отображаются, даже если нет совпадений в trainingRecords (которых, конечно, не существует, так как trainingRecords вообще не имеет данных).
Затем вы принимаетерезультаты этого запроса и ПРАВО НАРУЖНОЕ СОЕДИНЕНИЕ их к masterList.RIGHT OUTER гарантирует, что все записи masterList будут включены, даже если нет совпадений в trainingRecords.
Наконец, WHERE TR.TID IS NULL отфильтровывает любые записи, которые фактически соответствуют любым (будущим) записям в trainingRecords.