如何获取通过该表链接的所有记录集?

时间:2010-01-03 18:27:32

标签: sql mysql

我有三个表,包含以下字段:

: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”?我想要的只是一个包含学生姓名的记录集。

2 个答案:

答案 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标准中,我认为它更清楚。