问题1:
           TABLE A: ID、DATE、PRICE1、PRICE2、OBJECTNAME
           TABLE B:                      PRICE1、PRICE2、OBJECTNAMEA、B通过OBJECTNAME相关联, A中的OBJECTNAME在B中都存在,现在要更新B,使B中的每个OBJECTNAME的PRICE1、PRICE2都为最新的。问题2:TABLE A: CLASS(班级)、MONEY(钱数)、DATE(日期)
            TABLE B: STUDENT(学生)、CLASS(班级)、MONEY(用钱数目)、GRADE(贫困等级)、COME(出生地)求出来自山西的、贫困等级为一级的学生用完钱后,每个班级的剩余钱数

解决方案 »

  1.   

    又是你啊?
    第二个问题已经解决,
    第一个:
    UPDATE b SET (PRICE1,PRICE2)=(SELECT PRICE1,PRICE2 FROM a WHERE b.OBJECTNAME=OBJECTNAME AND ROWNUM=1) 
    WHERE EXISTS(SELECT 1 FROM a WHERE b.OBJECTNAME=OBJECTNAME)   ;
      

  2.   

    --1、a表中objectname里的值没有重复的吧
    update b 
    set price1=(select price1 from a where a.objectname=b.objectname),
        price2=(select price2 from a where a.objectname=b.objectname)
    where exists (select 1 from a where a.objectname=b.objectname)
    --2、
    select a.class,a.money-bb.newmoney
    from a,(select class,sum(money) newmoney 
            from b where b.come='山西' and grade='一级' 
            group by class) bb
    where a.class=bb.class
      

  3.   


    --怎么可能??
    --1、
    UPDATE b SET (PRICE1,PRICE2)=(SELECT PRICE1,PRICE2 FROM a WHERE b.OBJECTNAME=OBJECTNAME AND ROWNUM=1) 
    WHERE EXISTS(SELECT 1 FROM a WHERE b.OBJECTNAME=OBJECTNAME)   ;--2、
    select t1.class,(t1.sum2-Nvl(t2.sum1,0)) sum_money from
      (select class,sum(money) sum2 from a group by class) t1,
      (select class,sum(money) sum1 from b  where grade='一级' AND come='山西' group by class) t2
    where t1.class=t2.class(+)
      

  4.   


    第一个:
    UPDATE b SET (PRICE1,PRICE2)=(SELECT PRICE1,PRICE2 FROM a WHERE b.OBJECTNAME=OBJECTNAME AND ROWNUM=1) 
    WHERE EXISTS(SELECT 1 FROM a WHERE b.OBJECTNAME=OBJECTNAME)   ;问题有2:1、会提示FROM a  中的a不存在          2、把a换成表名后算出来不能保证是最新的第二个问题我昨天试的了  报什么错我不记得了
      

  5.   

    日期是最新的 DATE是最后的更新时间
      

  6.   

    建议楼主加一层视图,明显的表里只有DATE最新的数据才是有效的,其它数据是历史冗余,从业务角度讲应当分离出一个视图层来操作。勉强用一条SQL来玩成这些操作除了能展示你娴熟的SQL技巧之外没有任何好处。
      

  7.   

    你早不说这个条件!
    UPDATE tableB b SET (PRICE1,PRICE2)=(SELECT c.PRICE1,c.PRICE2 FROM tableA c WHERE b.OBJECTNAME=c.OBJECTNAME AND c.DATE=(SELECT Max(date) FROM tableA WHERE OBJECTNAME=c.OBJECTNAME) )  
    WHERE EXISTS(SELECT 1 FROM tableA a WHERE b.OBJECTNAME=OBJECTNAME) ;
      

  8.   

    gelyon兄的现在应该可以满足你的需求了吧客户又不小心把数据删除掉了,又要恢复数据