使用此示例SQL模式查询所需的培训课程

时间:2018-08-20 16:05:08

标签: mysql

给出以下模式:

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查询。

1 个答案:

答案 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