table A
id  east  west
1    10   20
2    15   30

table B
id east west

我在A中,选出east,west的最大值,insert到B
insert into B
select id, max(east),max(west) from B group by id然后,我要每天跑一个procedure,把B的数据更新,B始终保持 A中的max(east),max(west)感觉这种sql特别绕,这个该怎么写啊

解决方案 »

  1.   

    这样不绕,就算你用分析函数取到最大值还没直接拿函数来的快,
    或许你可以写个crontab挂在后台让他每天在你规定的时间点进行更新.
      

  2.   

    在oracle做一个计划让oracl定时执行就可以了。
      

  3.   

    没看懂具体意思?难不成是A表只要有更新就插入B表?如果是这样,那不如在触发器中去写这个SQL语句呢?
      

  4.   

    那以后是个update的过程,只有第一次是insert
      

  5.   

    写了个procedure,两个cursor,分别求出A中大于B中的east west然后循环update,把procedure挂在crontab上
      

  6.   

    你的需求同时涉及到INSERT和UPDATE两种操作,建议使用MERGE方法来实现,下面给你个例句,该例句没有经过调试,如果有BUG楼主自己修改下。MERGE INTO B
    USING (SELECT A.ID,MAX(A.EAST) MAXEAST,MAX(A.WEST) MAXWEST FROM A GROUP BY A.ID) C
    ON (B.ID = A.ID)
    WHEN MATCHED THEN
      UPDATE
      SET B.EAST = C.MAXEAST,
      B.WEST = C.MAXWEST
    WHEN NOT MATCHED THEN
      INSERT
      VALUES(C.ID,C.MAXEAST,C.MAXWEST);