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效率更高的方法?
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效率更高的方法?
pkg pkg_name cust_cd imsi_begin imsi_end
5 aa 11111 100000 500000
6 bb 22222 100000 500000
7 cc 33333 200000 333333
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);