我有一个表用户(user_id,用户名,密码等), 桌上课程(course_id,coursename等) 和一个表student_favouriteCourses(user_id,course_id)//都作为主键
我希望如果我知道用户的ID,搜索他作为收藏夹的所有课程。你可以帮我加入查询吗?
答案 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>'
有很多方法可以进行这些连接,具体取决于您的方案以及您希望如何对其进行编码。