update A set 毕业院校 =(select 毕业院校 from B where 身份号 in (select 身份号,MIN(文化程度) from B group by 身份号)BB)where A.身份号=BB.身份号
这样值就不唯一了

解决方案 »

  1.   

    你试一下,我没测试
    update A set 毕业院校 =(select b.毕业院校 from B where b.身份号 =(select MIN(文化程度) from B where a.身份号 =b.身份号)) ;
      

  2.   

    update A set 毕业院校 =(select 毕业院校 from (select 身份号,MIN(文化程度),MIN(毕业院校) 毕业院校 from B group by 身份号) BB)where A.身份号=BB.身份号
      

  3.   

    update A set 毕业院校 = (select 毕业院校 from B where 培训形式='脱产' and 身份号 in (select 身份号,MIN(文化程度) from B group by 身份号)BB)
    where A.身份号=BB.身份号
      

  4.   

    是两个表
    B其实是A的附属情况表,A表的其他许多字段我都省略了
    表的情况不用讨论了
    bzszp(SongZip)你写的
    update A set 毕业院校 =(select b.毕业院校 from B where b.身份号 =(select MIN(文化程度) from B where a.身份号 =b.身份号)) ;
    还是不对(我没测试),因为select b.毕业院校 from B where b.身份号 =(select MIN(文化程度) from B where a.身份号 =b.身份号)查询出来的是同一身份号的多纪录。
     
     
      

  5.   

    bingshi(碎石) 
    update A set 毕业院校 =(select 毕业院校 from (select 身份号,MIN(文化程度),MIN(毕业院校) 毕业院校 from B group by 身份号) BB)where A.身份号=BB.身份号 MIN(毕业院校) 怎么理解?
     
      

  6.   

    毕业院笑字段是varchar2,不是数字,也可以用MIN?
      

  7.   

    update A set 毕业院校=(select b.毕业院校 from B where b.文化程度=(select MIN(b1.文化程度) from
    B b1 where a.身份号 =b1.身份号)  and a.身份号 =b.身份号);这样是没有问题,但是你是否要过滤掉培训形为脱产的呢?       
      

  8.   

    因为你用了group by 所以要加min限制,group by的语法规定
      

  9.   

    bingshi(碎石) 
      update A set 毕业院校 =(select 毕业院校 from (select 身份号,MIN(文化程度),MIN(毕业院校) 毕业院校 from B group by 身份号) BB)where A.身份号=BB.身份号select 毕业院校 from (select 身份号,MIN(文化程度),MIN(毕业院校) 毕业院校 from B group by 身份号
    单独执行是正确的,但整体执行出错,是不是select 毕业院校 from (select 身份号,MIN(文化程度),MIN(毕业院校) 毕业院校 from B group by 身份号) BB出错了  
     
      

  10.   

    bzszp(SongZip) 
      update A set 毕业院校=(select b.毕业院校 from B where b.文化程度=(select MIN(b1.文化程度) from
    B b1 where a.身份号 =b1.身份号)  and a.身份号 =b.身份号);
    这样是没有问题,但是你是否要过滤掉培训形为脱产的呢?    
    --------------------------------------------------------------------
    我是要过滤掉函授的,举例:李三本科是脱产的,硕士是函授的,只取李三脱产里面文化程度最高的   
    要用到group by 身份号,因为一个人可以上很多次学
      
     
      

  11.   

    update A set 毕业院校 =(select 毕业院校 from (select 身份号,MIN(文化程度),MIN(毕业院校) 毕业院校 from B where A.身份号=B.身份号 group by 身份号) BB)应该可以了,你验证一下结果对吗?
      

  12.   

    SQL> select * from a;姓名       毕业院校   毕业时间            身份号     职务
    ---------- ---------- ------------------- ---------- ----------
    李三       大学       2002-11-21 13:32:13 001        开发经理
    吴仁       大学       2002-11-21 13:32:16 002        人事经理SQL> select * from b;身份号     毕业院校   培训形式    文化程度 姓名
    ---------- ---------- ---------- --------- ----------
    001        南京大学   脱产               4 李三
    001        人民大学   脱产               3 李三
    002        北京大学   脱产               3 吴仁SQL> update A set 毕业院校=(select b.毕业院校 from B where b.文化程度=(select MIN(b1.文化程度) from
      2  B b1 where a.身份号 =b1.身份号 and b1.培训形式='脱产')  and a.身份号 =b.身份号);已更新2行。SQL> select * from a;姓名       毕业院校   毕业时间            身份号     职务
    ---------- ---------- ------------------- ---------- ----------
    李三       人民大学   2002-11-21 13:32:13 001        开发经理
    吴仁       北京大学   2002-11-21 13:32:16 002        人事经理
      

  13.   

    谢谢大家了,特别是bzszp(SongZip) bingshi(碎石) 两位朋友