test1表
cust_cd     pkg     imsi
11111         1      123456
22222         1      999999
33333         1      222222
11111         2      777777
22222         3      111111test2表
pkg  pkg_name  cust_cd   imsi_begin   imsi_end
5     aa        11111     100000       500000
6     bb        22222     100000       500000
7     cc        33333     200000       333333
想要更新test1表的pkg字段为test2的pkg,条件为同一个cust_cd并且test1的imsi在test2的imsi范围内,
现在知道可以通过cursor针对test2的每一条数据来更新test1,不过test1表的数据比较大,请问有没有一个语句能实现?有没有比用cursor效率更高的方法?

解决方案 »

  1.   

    test2表
    pkg  pkg_name  cust_cd   imsi_begin   imsi_end
    5       aa        11111     100000       500000
    6       bb        22222     100000       500000
    7       cc        33333     200000       333333
      

  2.   


    UPDATE TEST1
       SET PKG = (SELECT PKG
                    FROM TEST2
                   WHERE TEST1.CUST_CD = TEST2.CUST_CD
                     AND TEST1.IMSI BETWEEN TEST2.IMSI_BEGIN AND TEST2.IMSI_END
                     AND ROWNUM = 1)
     WHERE EXISTS (SELECT 1
              FROM TEST2
             WHERE TEST1.CUST_CD = TEST2.CUST_CD
               AND TEST1.IMSI BETWEEN TEST2.IMSI_BEGIN AND TEST2.IMSI_END
               AND ROWNUM = 1);
      

  3.   

    请教一下,ROWNUM = 1何解?
      

  4.   

    http://fronkx.blog.hexun.com/12407600_d.html