Правильно ругается. У вас наверняка в курсе не один преподаватель, а несколько (может, не во всех курсах), поэтому выводится одна строка курса, а строк преподавателей - несколько, и MySQL не знает, как их связать.
Вам запрос нужно писать по другому, вывод преподавателей сохранить во временную таблицу, потом вывести курс с ресурсами и в конце уже сопоставить курс и его преподавателей.
Пример такого запроса, выводящего всех управляющих по всем категориям курсов:
select qq.tmp 'Кафедра'
,qq.fio 'ФИО'
from (
select case
when @txt = t.name COLLATE utf8mb4_unicode_ci then ''
else @txt := t.name
end tmp,
t.name, t.fio
from
(SELECT
cc.name
,CONCAT(u.lastname,' ',u.firstname,' ',u.middlename) fio
FROM {user} u
LEFT JOIN {role_assignments} ra ON u.id=ra.userid
LEFT JOIN {context} ctx ON ctx.id=ra.contextid
LEFT JOIN {course_categories} cc ON cc.id=ctx.instanceid
WHERE ra.roleid=1
ORDER BY cc.name, u.lastname) t,
(select @txt := '') r
Вывод: