分类:
2007-03-16 16:22:56
有个表 FXS_LAGE_GROUP(SEQ_NO, CUSTOMER_ID, PRODUCT_ID),存放用户的产品ID的信息,用户表Customer 有4000 个用户。
现在要求每个用户增加一条ProductID数据到 FXS_LAGE_GROUP 表中,并且SEQ_NO递增的,数字,不唯一。
insert into FXS_LAGE_GROUP select (( row_number() over() ) + c.maxNo) ,b.CUSTOMER_ID ,'S100',1,current_timestamp,current_timestamp
from (select distinct CUSTOMER_ID from FXS_LAGE_GROUP ) b,(select max(SEQ_NO) maxNo from FXS_LAGE_GROUP ) c
分析:构造了两个结果集,用户信息Customer表的条数 × 1 ,自增长是通过用户信息中对用户表排序得到从1到4000左右的 序号,然后加上以前的最大值,得到一个递增的象自增长一样的东西。于是问题解决。
1, (( row_number() over() ) 构造 Oracle中类型 Rownum的东西,实现序号。2,笛卡儿积并不怕,n*1 = n ,1行的数据就相当于常量了。笛卡儿积 其实还有很多妙用。