Вы можете использовать эти role_id в объединениях для сотрудников и студентов.
Поскольку имя сотрудника или имя учащегося будет пустым, вы можете использовать COALESCE, чтобы получить только 1 имя.
select
u.name as user_name,
u.role_id,
r.name as role_name,
COALESCE(sta.name, stu.name) AS name
FROM users u
LEFT JOIN roles r ON r.id = u.role_id
LEFT JOIN staff sta ON (sta.user_id = u.id AND u.role_id = 3)
LEFT JOIN students stu ON (stu.user_id = u.id AND u.role_id = 5)
WHERE u.id = 11068
Но я не думаю, что это необходимо с этими дополнительными правилами в соединениях.
Полагаю, вы могли бы сказать, что кто-то является студентом, если он учится в "студентах".
И персонал, когда они в "штате".
Независимо от role_id.
И в SQL вы можете использовать CASE также в качестве переключателя.
select
u.name as user_name,
u.role_id,
r.name as role_name,
(CASE u.role_id
WHEN 3 THEN sta.name
WHEN 5 THEN stu.name
END) AS name
FROM users u
LEFT JOIN roles r ON r.id = u.role_id
LEFT JOIN staff sta ON sta.user_id = u.id
LEFT JOIN students stu ON stu.user_id = u.id
WHERE u.id = 11068