sql中一个表中,求实体之间关系,自关联导致效率低下问题?

sipherhern 2018-03-21 02:50:59
情景:比如现在有一张A城市所有学校学生信息的表student(1000W),现在需要求学生与学生之前是否是同学关系(条件是同校同级同班),那么问题就来了,这样student 和 student 自关联,会产生很多关联关系【比如一个班50个人,同学x和其他49个人都会产生关系】导致效率低下。请问有没有更好的办法解决?!求教!
...全文
851 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sipherhern 2018-03-22
  • 打赏
  • 举报
回复
引用 1 楼 panxuying123 的回复:
需要要用表关联,换个思路。先查出两个学生所有的学校 、哪一届、班级,然后按照这三个进行分组,如果存在大于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个学生的关系 比如 学生A XXX年入校 学生B XXX年入校 关系为同学 班级 级别 学校 这样的格式。如果不用关联的话,如何做到呢?
p&h 2018-03-22
  • 打赏
  • 举报
回复
需要要用表关联,换个思路。先查出两个学生所有的学校 、哪一届、班级,然后按照这三个进行分组,如果存在大于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
p&h 2018-03-22
  • 打赏
  • 举报
回复
不需要用关联表,上面打错了
小灰狼W 2018-03-22
  • 打赏
  • 举报
回复
应该有一个学生所属班级的历史表对吧,那么问题就简单了 假设这张表为T表, select 班级相关信息 from t where 学生主键=ID 能查出该学生的历史班级信息 那么,我们取两个学生的交集 select 班级相关信息 from t where 学生主键=学生A intersect select 班级相关信息 from t where 学生主键=学生B 查询结果,即重合的班级,就是他们同为同学的班级,如果没有返回记录,则没有同学关系

3,490

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧