问题描述
现在有三张表1.教师表(teacher)结构为teacher_id,teacher_name2.学生表(student)结构为student_id,student_name3.教师学生关联表(teacher_students)结构为teacher_id,students前两张就不用说了,第三张的students数据结构如下student_id:is_later;student_id:is_later的结构student_id表示的是学生id,is_later表示是否迟到,现在考虑要展示如下的情况:teacher_id,teacher_name,student_name:is_later;student_name:is_later 问题补充:lerous 写道
解决方案
你可以问设计人员,设计表的时候有没有考虑怎么取数据的,怎么关联的?还有你说的放在内存中,是说把10000*10000条数据放内存中吗?这样内存能不能负荷可能是个问题,估算了下大概是要1G的内存,如果几个人同时调用那难了其实还有个办法,你可以只关联教师表和学生表,在需要用到islater的时候,然后再传入teacher_id重新查一次,也就是说放在程序里面处理。如果是显示列表的形式就不好办了,要查询的次数就多了
解决方案二:
这样的交流是有利于提升的~ 也学到不少东西,所以不要客气~
解决方案三:
查过了,oracle没有将字符串转成数组的函数,需要将 转成数组和遍历数组的步骤换成(var_tmp是student列,值如“1:0,2:1,3:0”)一段一段的截取,先截取1:0,然后将剩下的部分赋值var_tmp(去掉一个','),再从'1:0'中提取student_id和islater如下SQL:while instr(var_tmp,',')>0 loop var_element := substr(var_tmp,1,instr(var_str,',')-1); var_tmp := substr(var_tmp,instr(var_str,',')+1,length(var_tmp)); ...(提取student_id和islater并插入到临时表)end loop;
解决方案四:
想了想思路,你看这样行的通么,用函数或者过程把,应该是返回游标类型步骤:新建临时表,结构:teacher_id,student_id,islater首先查询关系表teacher_students,循环遍历查询结果,取的student列, 用类似split的函数按‘:’将该列转成数组(不太清楚oracle是否有这个函数),在遍历数组,循环中,将teacher_id,student_id,islater插入到临时表中去,然后关联teacher,student,临时表,删除临时表(不知道删除以后,通过游标获取数据是否会有问题)返回游标。
解决方案五:
我认为要用一个SQL写,够呛,应该不能完成要求把,为什么那张关系表不这样设计呢?teacher_id,student_id,islater一目了然,很变态的表结构~~~
解决方案六:
哦~ 看了下你的数据,我的SQL是不对
解决方案七:
你可以试试吗?我认为不可能会出现你说的那个结果~~~
解决方案八:
是写错了,我知道islater不是ts的列,改了下,试试看select t.teacher_id,t.teacher_name, s.student_id||':'||substr(ts.students,instr(ts.students,':')+1,length(ts.students)-1), s.student_name||':'||substr(ts.students,instr(ts.students,':')+1,length(ts.students)-1)from teacher t,student s,teacher_students ts where t.teacher_id = ts.teacher_id and s.student_id = substr(ts.students,0,instr(ts.students,':')-1)别名你自己改下~
解决方案九:
select t.teacher_id,t.teacher_name, s.student_id||':'||ts.is_later, s.student_name||':'||ts.islaterfrom teacher t,student s,teacher_students tswhere t.teacher_id = ts.teacher_idand s.student_id = substr(ts.students,0,ts.students.indexOf(':'));获取字符':'的oracle函数忘了,应该不是indexOf(),应该是有这个函数的