Chinaunix首页 | 论坛 | 博客
  • 博客访问: 166192
  • 博文数量: 20
  • 博客积分: 1610
  • 博客等级: 上尉
  • 技术积分: 230
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-16 15:40
文章分类

全部博文(20)

文章存档

2013年(1)

2012年(2)

2011年(8)

2010年(1)

2009年(2)

2008年(2)

2007年(4)

分类:

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行的数据就相当于常量了。
     笛卡儿积 其实还有很多妙用。
 
Cu的格式编辑做的不错,今天第一次用很爽。
 
王小林
2007-03-16
 
阅读(2286) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:分组的一个写法.....

给主人留下些什么吧!~~