2015-03-25 103 views
0

如果我的表格如下所示,如何选择给定学生的同学?如何从学生班级关联表中选择给定学生的同学?

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 

回答

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

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

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