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

Mysql 使用此示例SQL模式查询所需的培训课程,mysql,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) 用户有许多课程(单独分配) 用户通过培训组有很多课程,培训组有很多课程 我

给定以下模式:

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)
用户有许多课程(单独分配)

用户通过培训组有很多课程,培训组有很多课程

我想为特定用户id检索一组课程标题,该用户id包括独立分配的课程(来自用户\u课程)以及通过用户培训组关系(用户\u培训组)


我可以通过在一种编程语言中运行多个查询和组装结果来实现这一点,但我还没有找到一个SQL查询可以做到这一点

一种方法是使用两个不同的查询,并使用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

一种方法是使用两个不同的查询,并使用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

您还应添加有效的数据样本和预期的.result。您还应添加有效的数据样本和预期的.result