给出以下模式:
users (id, name)
courses (id, title)
training_group (id, title)
training_group_courses (training_group_id, course_id)
users_courses (user_id, course_id)
users_training_groups (user_id, training_group_id)
用户有很多课程(单独分配)
用户通过training_groups有许多课程,而这些课程又有很多课程
我想为特定用户ID检索一组课程标题,该ID包括单独分配的课程(来自users_courses)以及通过用户培训组关系(users_training_groups)
我可以通过运行多个查询并以编程语言组合结果来实现此目的,但是我还无法提出一个可以执行相同操作的SQL查询。
答案 0 :(得分:2)
一种方法是使用两个不同的查询,然后使用 union 运算符将结果合并:
select c.title, 'individual' as source from users u
join users_courses uc on u.id = uc.user_id
join courses c on c.id = uc.course_id
where u.id = 1
union all
select c.title, 'group' as source from users u
join users_training_groups ugt on ugt.user_id = u.id
join training_group tg on ugt.training_group_id = tg.id
join training_group_courses tgc on ugt.training_group_id = tgc.training_group_id
join courses c on c.id = tgc.course_id
where u.id = 1