sql内连接有多对多的关系

时间:2017-02-27 13:54:37

标签: sql join

我有一个表用户(user_id,用户名,密码等), 桌上课程(course_id,coursename等) 和一个表student_favouriteCourses(user_id,course_id)//都作为主键

我希望如果我知道用户的ID,搜索他作为收藏夹的所有课程。你可以帮我加入查询吗?

2 个答案:

答案 0 :(得分:1)

也许是这样的:

SELECT * FROM student_FavouriteCourse fav JOIN student stu ON ( fav.user_id = stu.user_id) JOIN courses crs ON ( fav.course_id = crs.course_id) WHERE fav.user_id = <yourvalue>

作为解释:

1)这将返回student_FavouriteCourse(使用&#34; fav&#34;作为别名)你想要的记录

SELECT * FROM student_FavouriteCourse fav WHERE fav.user_id = <yourvalue>

2)然后你JOIN学生的详细信息(使用&#34; stu&#34;作为别名)

JOIN student stu ON ( fav.user_id = stu.user_id)

3)然后你JOIN课程详情(使用&#34; crs&#34;作为别名)

JOIN courses crs ON ( fav.course_id = crs.course_id)

如果您不熟悉JOIN和SQL,我是否可以建议您在上述每个步骤中运行此查询,然后您将看到联接的工作方式以及如何构建结果数据集。

编辑:再次阅读你的帖子,我发现你实际上并不需要学生加入,只需要课程。因此:

SELECT * FROM student_FavouriteCourse fav JOIN courses crs ON ( fav.course_id = crs.course_id) WHERE fav.user_id = <yourvalue>

答案 1 :(得分:0)

我认为你在尝试一个非常基本的MySQL查询,下次你可以请试着把你的代码放进去,这样我们可以帮助你的错误,你可以向他们学习吗?

无论如何,你试图做的代码应该是这样的:

select u.id, u.username, c.coursename
from users u
left join student_favouriteCourses f on u.id = f.user_id
left join courses c on f.course_id = c.id
where u.username = '<YourUsername>'

这将返回您的用户加入您最喜爱的课程,然后返回课程。

如果您想确保至少展示1门课程(确认课程存在),内部联接将帮助您:

select u.id, u.username, c.coursename
from users u
inner join student_favouriteCourses f on u.id = f.user_id
inner join courses c on f.course_id = c.id
where u.username = '<YourUsername>'

有很多方法可以进行这些连接,具体取决于您的方案以及您希望如何对其进行编码。

我在这里留下link that explains this much better