我有三个表,包含以下字段:
类:class_id |名字|等级
classes_students :class_id | student_id数据
学生:student_id |名字
课程与学生有1:n的关系,因此一个班级可以有很多学生。我想选择特定班级的所有学生,其中class_id为5。
我可以这样做吗?
SELECT student.name FROM students student
LEFT JOIN classes_students link
ON link.class_id = 5
AND link.student_id = student.student_id
我不确定我是否需要在这里加入,如果必须是“LEFT JOIN”?我想要的只是一个包含学生姓名的记录集。
答案 0 :(得分:1)
使用:
SELECT s.name
FROM STUDENTS s
JOIN CLASSES_STUDENTS cs ON cs.student_id = s.student_id
AND cs.class_id = 5
可替换地:
SELECT s.name
FROM STUDENTS s
JOIN CLASSES_STUDENTS cs ON cs.student_id = s.student_id
JOIN CLASSES c ON c.class_id = cs.class_id
WHERE c.class_id = 5
因为您只希望学生在特定班级,所以您需要使用INNER JOIN。如果你想要列出所有学生的列表,你可以使用LEFT JOIN,然后LEFT JOIN到CLASSES_STUDENTS
以了解是否有人正在上课(因为那些不会在{{{ 1}}列)。我推荐looking at this link for the breakdown of various JOINs and their impact on the data you'll get back。
答案 1 :(得分:0)
SELECT
student.name
FROM
students student
INNER JOIN
classes_students link
ON
link.student_id = student.student_id
WHERE
link.class_id = 5
如果您只是将连接更改为INNER,您的查询实际上应该可以正常工作,但我更喜欢使用where子句来过滤结果而不是将其包含在JOIN标准中,我认为它更清楚。