情景:比如现在有一张A城市所有学校学生信息的表student(1000W),现在需要求学生与学生之前是否是同学关系(条件是同校同级同班),那么问题就来了,这样student 和 student 自关联,会产生很多关联关系【比如一个班50个人,同学x和其他49个人都会产生关系】导致效率低下。请问有没有更好的办法解决?!求教!

解决方案 »

  1.   

    需要要用表关联,换个思路。先查出两个学生所有的学校 、哪一届、班级,然后按照这三个进行分组,如果存在大于2的记录则是同学,否则不是。
    select * from (
    select count(1) nm,stu.学校id,stu.哪一级id,stu.班级
    from student stu
    where stu.id=A.id or stu.id=B.id
    group by stu.学校id,stu.哪一级id,stu.班级) b where b.nm>1
      

  2.   


    首先谢谢你的回复!但是我的需求里面是需要  同一条记录里展示2个学生的关系
    比如  学生A   XXX年入校  学生B XXX年入校  关系为同学  班级 级别 学校    这样的格式。如果不用关联的话,如何做到呢?
      

  3.   

    应该有一个学生所属班级的历史表对吧,那么问题就简单了
    假设这张表为T表,
    select 班级相关信息 from t where 学生主键=ID
    能查出该学生的历史班级信息
    那么,我们取两个学生的交集
    select 班级相关信息 from t where 学生主键=学生A
    intersect 
    select 班级相关信息 from t where 学生主键=学生B查询结果,即重合的班级,就是他们同为同学的班级,如果没有返回记录,则没有同学关系