有两个表
表A
num   num2  num3
1     A     B
5     C     D
12    E     F
15    G     H
......
表a的num列不是递增的中间间隔也不定 表b的num列是递增的,现在要求表b的num2列和num3列 通过表a的num2和num3列来填值 通过 num来填
表A num列 会不定期增加,而且增加的幅度也不固定,目前最大的是15 下一个可能是 18 也可能 是 20
如果表A的 num 列 下一个增加的值为 17 
而表B的num 列 已经填充到 20 则表B的 num 列大于等于17的 num2 num3的 值 更新为 表A num为17的 num2 num3的值
 
表B如下
num   num2  num3
1     A     B
2     A     B
3     A     B
4     A     B
5     C     D
6     C     D
7     C     D
8     C     D
9     C     D
10    C     D
11    C     D
12    E     F
13    E     F
14    E     F
15    G     H
16    G     H
17    G     H
18    G     H
19    G     H
20    G     H

解决方案 »

  1.   

    CREATE TABLE TBL_A
    ( NUM INTEGER,
      NUM2 CHAR(1),
    NUM3 CHAR(2)
    );
    CREATE TABLE TBL_B
    ( NUM INTEGER,
      NUM2 CHAR(1),
    NUM3 CHAR(2)
    );


    INSERT INTO TBL_A VALUES (1,'A','B'); 
    INSERT INTO TBL_A VALUES (5,'C','D'); 
    INSERT INTO TBL_A VALUES (12,'E','F'); 
    INSERT INTO TBL_A VALUES (15,'G','H'); 
    COMMIT;INSERT INTO TBL_B VALUES (1,'A','B'); 
    INSERT INTO TBL_B VALUES (2,'A','B'); 
    INSERT INTO TBL_B VALUES (3,'A','B'); 
    INSERT INTO TBL_B VALUES (4,'A','B'); 
    INSERT INTO TBL_B VALUES (5,'C','D'); 
    INSERT INTO TBL_B VALUES (6,'C','D'); 
    INSERT INTO TBL_B VALUES (7,'C','D'); 
    INSERT INTO TBL_B VALUES (8,'C','D'); 
    INSERT INTO TBL_B VALUES (9,'C','D'); 
    INSERT INTO TBL_B VALUES (10,'C','D'); 
    INSERT INTO TBL_B VALUES (11,'C','D'); 
    INSERT INTO TBL_B VALUES (12,'E','F'); 
    INSERT INTO TBL_B VALUES (13,'E','F'); 
    INSERT INTO TBL_B VALUES (14,'E','F'); 
    INSERT INTO TBL_B VALUES (15,'C','A'); 
    INSERT INTO TBL_B VALUES (16,'C','A'); 
    INSERT INTO TBL_B VALUES (17,'C','B'); 
    INSERT INTO TBL_B VALUES (18,'G','D'); 
    INSERT INTO TBL_B VALUES (19,'C','E'); 
    INSERT INTO TBL_B VALUES (20,'C','F'); 
    COMMIT;
      

  2.   

    UPDATE TBL_B T
       SET (T.NUM2, T.NUM3) = (SELECT T.NUM2,
                                      T.NUM3
                                 FROM TBL_A T
                                WHERE T.NUM = (SELECT MAX(T.NUM)
                                                 FROM TBL_A T))
     WHERE T.NUM >= (SELECT MAX(T.NUM)
                       FROM TBL_A T);
    COMMIT;