学生表TB1       
SID  STU_NAME  两个字段
 1     张三
 2     李四
 3     王五
 4     赵柳
 5     孙七
SID是主键唯一    STU_NAME是学生名 学生班级关系表TB2STU_SID STU_NAME CLASS_NAME 三个字段
  1        张三    一年一班 
  2        李四    一年一班
  3        王五    一年二班
  4        赵柳    一年三班
  5        孙七    一年三班 没有主键STU_SID跟TB1中SID关联STU_NAME 是学生名  跟TB1是一样的 
CLASS_NAME 就是班级名
这两个表信息就这样现在想要把TB2(关系表拆分开,也可以说去掉)
新建个表CLASS_INFO(先叫它TB3)
班级信息表TB3
CLASS_ID   CLASS_NAME 
   1          一年一班
   2          一年二班
   3          一年三班学生表TB1 加个字段   CLASS_ID  也就是TB3的主键    
SID  STU_NAME   CLASS_ID
表数据我就不写了原始数据要怎么导入?而且新建的TB3中士TB2中剔除CLASS_NAME 字段重复 就是说 在TB3中CLASS_NAME也是唯一的在线等 谢谢

解决方案 »

  1.   

    CLASS_INFOinsert into classinfo select rownum, CLASS_NAME from (select CLASS_NAME from TB2 group by CLASS_NAME order by class_name) ;TB1(class_id)update tb1 set class_id=(select class_id from CLASS_INFO, tb2 where CLASS_INFO.class_name=tb2.class_name and tb2.SID=tb1.sid);
      

  2.   

    楼上加一个:
    ALTER TABLE TB1 ADD(class_id NUMNER)
      

  3.   

    inthirties您好
    我最后执行
    update tb1 set class_id=(select class_id from CLASS_INFO, tb2 where CLASS_INFO.class_name=tb2.class_name and tb2.SID=tb1.sid);这个语句的时候   怎么报这个错误
    如下
    single-row subquery returns more than one row
      

  4.   


    先查看一下CLASS_INFO这个表,class_id看有没有重复的
      

  5.   

    没有重复的啊 NAME 跟ID 都没有重复的了
      

  6.   

    rownum这样下来的 本来就应该没有重复的吧
      

  7.   


    对,rownum不会有重复,不过有一点就是  1          一年一班 
      2          一年二班 
      3          一年三班 
    rownum不一定按照上面这个顺序来,可能一年二班是1,一年一班是2
    我试验过,出现下面的情况:
        ROWNUM CLASS
    ---------- --------------------
            1 一年一班
             2 一年四班
             3 一年三班
             4 一年二班
             5 二年一班
      

  8.   


    select CLASS_INFO.id, tb1.sid from CLASS_INFO, tb2 where CLASS_INFO.class_name=tb2.class_name and tb2.SID=tb1.sid group by CLASS_INFO.id, tb1.sid having count(1) > 1;查查这个sql有没有结果。
      

  9.   

    update tb1 set class_id=(select MAX(class_id) from CLASS_INFO, tb2 where CLASS_INFO.class_name=tb2.class_name and tb2.SID=tb1.sid); 我在MAX(class_id)这里加了个MAX
    就可以
    请问这样会不会影响什么??
      

  10.   

    刚才的错提示是有多行记录,max可以保证这有一个结果集,所以可以成功不过select class_id from CLASS_INFO, tb2 where CLASS_INFO.class_name=tb2.class_name and tb2.SID=tb1.sid这个子查询,本生应该只有一条结果的,不知道这里为什么有多个结果出来。所以 你可以用后面的sql看看
    是那些数据有1条以上的结果返回,也许你的TB2表,有重复记录。
      

  11.   

    inthirties朋友完美的解决了我的问题!
    万分感谢!!