Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何从学生班级关联表中选择给定学生的同学?_Mysql_Sql_Query Optimization - Fatal编程技术网

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

Mysql 如何从学生班级关联表中选择给定学生的同学?,mysql,sql,query-optimization,Mysql,Sql,Query Optimization,如果我的表格如下所示,我如何选择某个学生的同学 student_class_assn student_id class_id 1 1 2 1 3 1 4 2 5 2 6 3 例如,学生1将学生2和3作为同学 请帮助我编写一个以已知的学生id为中心的查询,并仅选择同学(不包括给定的学生) 下面是一个使用子选择的示例。但是你能帮我用连接代替它吗 SE

如果我的表格如下所示,我如何选择某个学生的同学

student_class_assn
student_id    class_id
1             1
2             1
3             1
4             2
5             2
6             3
例如,学生
1
将学生
2
3
作为同学

请帮助我编写一个以已知的
学生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;
根据我的上表,我希望每个给定的
学生id
都有以下结果:

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

您只需加入表并传递一个条件

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
选择t1.student\u id
来自学生班助理
加入学生班助理t1
在t1.class\u id=t.student\u id上
和t1.student_id 1
其中t.student_id=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
选择s1.sid,group_concat(s2.sid按s2.sid排序,',')
从…起
s1级螺柱内连接
s1上的s2级螺柱。cid=s2.cid
其中s1.sid s2.sid
按s1.sid分组
按1订购