如何从学生班级关联表中选择给定学生的同学?

时间:2015-03-25 04:09:08

标签: mysql sql query-optimization

如果我的表格如下所示,我该如何选择给定学生的同学?

student_class_assn
student_id    class_id
1             1
2             1
3             1
4             2
5             2
6             3

例如,学生1将学生23作为同学。

请帮我写一个以已知student_id为中心的查询,只选择同学(不包括给定的学生)。

以下是使用子选择的示例。但是,你可以帮我用连接写它吗?

SET @KNOWN_STUDENT=1;
SELECT
    student_id
FROM
    student_class_assn
WHERE
    class_id IN (
        SELECT class_id FROM student_class_assn WHERE student_id = @KNOWN_STUDENT
    )
    AND student_id != @KNOWN_STUDENT;

根据上面的表格,我希望每个给定的student_id得到以下结果:

1 returns 2,3
2 returns 1,3
3 returns 1,2
4 returns 5
5 returns 4
6 returns NULL

2 个答案:

答案 0 :(得分:1)

您需要做的只是加入表并传递条件

SELECT t1.student_id
FROM student_class_assn t
JOIN student_class_assn t1 
    ON t1.class_id = t.student_id 
    AND t1.student_id <> 1
WHERE t.student_id = 1

FIDDLE

答案 1 :(得分:1)

这不会显示没有同学的学生:

select s1.sid,group_concat(s2.sid order by s2.sid,',')
from
stud_class s1 inner join
stud_class s2 on s1.cid=s2.cid
where s1.sid <> s2.sid
group by s1.sid
order by 1