我有一个表是这样的
table1
id  date
1   05/04
2   05/05table2
number  id     date   other
  1      1      05/04   2
  2      2      05/05   3
  3      1      05/06   5
  4      2      05/07   1我要根据table2的id来更新table1中的date,table2每天更新,
但我写的sql语句执行后,table1的date永远是最早的日期,
比如: 现在执行更新后table1应该为table1
id  date
1   05/06
2   05/07
但现在不能更新,更新完了还是
table1
id  date
1   05/04
2   05/05
我的更新语句是这样的
UPDATE tabel1 INNER JOIN table2 ON table1.id = table2.id
   SET table1.date        =  table2.date ;请大家指点一下,我该怎样改写我的更新语句。谢谢!

解决方案 »

  1.   

    可以考虑用油标更新,不过你举的例子ID和DATE都是关键字,数据库里应该没有这样的字段。  CURSOR C_2 IS
      SELECT DISTINCT id,MAX(date)AS MAXDATE FROM TABLE2;
      VID TABLE1.ID%TYPE;
      VMAXDATE TABLE1.date%TYPE;
      OPEN C_2;
            LOOP
                FETCH C_2 INTO VID,VMAXDATE;
                EXIT WHEN C_2%NOTFOUND;
                BEGIN
                  UPDATE TABLE1 SET  DATE=VMAXDATE WHERE ID=VID;    
                END;
            END LOOP;
       CLOSE C_2;
      

  2.   

    漏了个“GROUP BY”
    CURSOR C_2 IS
      SELECT DISTINCT id,MAX(date)AS MAXDATE FROM TABLE2 GROUP BY ID;
      VID TABLE1.ID%TYPE;
      VMAXDATE TABLE1.date%TYPE;
      OPEN C_2;
            LOOP
                FETCH C_2 INTO VID,VMAXDATE;
                EXIT WHEN C_2%NOTFOUND;
                BEGIN
                  UPDATE TABLE1 SET  DATE=VMAXDATE WHERE ID=VID;   
                END;
            END LOOP;
      CLOSE C_2;
      

  3.   

    update table1 set date=(select max(date) from table2 where id=table1.id);
      

  4.   

    考虑到跨年的话,还是取number最大的date比较好
    比如  number  id    date  other 
      1      1      12/31  2 
      2      1      01/01  3 
    应该取01/01  ,不是12/31