IceCool

贵宾

贴子 86715

精华 5

积分 44263

信用 0

竞猜 0

魅力 1313

威望 3

现金 502369 CZB

银行 0 CZB

黄金 0

比特币 0

注册时间 2003-08-19

发表于:2007-10-16 10:10:21   |  只看该作者   |  本帖随机奖励楼主:0 CZB   |  转账至  IceCool

请问一个oracle的问题

test表里 有 id  team 两个字段

id   team
1      A  
2      A
3      B
4      B
5      C
6      C


在update 的时候 我想做以下操作 根据team 来更改ID  从team 'B'的最小id 开始 把3改成-1 4改成-2 以此类推 请问该用什么方式来操作呢
楼主
编辑   |    引用    回帖
关闭    高亮    置顶   |    移动    回收站   |    -6删主题    删主题    |   
@叶子@

老鼠爱飞儿

论坛元老

贴子 72006

精华 0

积分 36872

信用 18

竞猜 21

魅力 668

威望 5

现金 250 CZB

银行 0 CZB

黄金 0

比特币 0

注册时间 2007-06-12

发表于:2007-10-16 12:10:24   |  只看该作者   |  转账至  @叶子@
复合查询
你见,或者不见我  我就在那里  不悲 不喜  
你念,或者不念我  情就在那里  不来 不去  
你爱,或者不爱我  爱就在那里  不增 不减  
你跟,或者不跟我  我的手就在你手里 不舍 不弃   
沙发
编辑   |    引用    回帖
关闭    高亮    置顶   |    移动    回收站   |    -6删帖    删帖    |   
水柔儿

正式会员

静水深流

贴子 763

精华 0

积分 399

信用 0

竞猜 0

魅力 35

威望 0

现金 50 CZB

银行 0 CZB

黄金 0

比特币 0

注册时间 2006-08-02

发表于:2007-10-16 14:10:13   |  只看该作者   |  转账至  水柔儿
引用:
原帖由 IceCool 于 2007-10-16 10:32 发表
test表里 有 id  team 两个字段

id   team
1      A  
2      A
3      B
4      B
5      C
6      C


在update 的时候 我想做以下操作 根据team 来更改ID  从team 'B'的最小id 开始 把3改成-1 4改成 ...
不是太明白 C怎么处理?
我想你,已经到泛滥的极限
即使在你身边,我依然想着你
板凳
编辑   |    引用    回帖
关闭    高亮    置顶   |    移动    回收站   |    -6删帖    删帖    |   
锄禾

师太啊师太 饶了老衲吧

金牌会员

最近脑子不太好使

贴子 8693

精华 0

积分 4352

信用 0

竞猜 0

魅力 10

威望 0

现金 752 CZB

银行 0 CZB

黄金 0

比特币 0

注册时间 2006-08-30

发表于:2007-10-16 14:10:16   |  只看该作者   |  转账至  锄禾
联合查询。。
嘿嘿~
Fk.SBS
4楼
编辑   |    引用    回帖
关闭    高亮    置顶   |    移动    回收站   |    -6删帖    删帖    |   
水柔儿

正式会员

静水深流

贴子 763

精华 0

积分 399

信用 0

竞猜 0

魅力 35

威望 0

现金 50 CZB

银行 0 CZB

黄金 0

比特币 0

注册时间 2006-08-02

发表于:2007-10-16 15:10:13   |  只看该作者   |  转账至  水柔儿
如果只是更新B 可以这么写:

update test m
set m.id =
(
select sortnum
from (select -rownum  sortnum ,id,name from test where name = 'B') n
where m.id = n.id
)
where m.name = 'B'


------------------------------------------------------------------
如果所有的Name都要更新,存储过程

create or replace procedure prc_ipdate_test
is
cursor cur_temp is
  select distinct test.name from  test;
begin
  FOR cur_1 in cur_temp LOOP
        update test m
           set m.id =
                    (
                        select sortnum
                        from (select -rownum  sortnum ,id,name from test where name = cur_1.name) n
                        where m.id = n.id
                        and m.name = n.name
                    )
         where m.name = cur_1.name;
  end loop;
commit;  
end prc_ipdate_test;

[ 本帖最后由 水柔儿 于 2007-10-16 15:39 编辑 ]
我想你,已经到泛滥的极限
即使在你身边,我依然想着你
5楼
编辑   |    引用    回帖
关闭    高亮    置顶   |    移动    回收站   |    -6删帖    删帖    |   
金狐

狐狸

管理员

贴子 138997

精华 13

积分 77006

信用 11

竞猜 20

魅力 23333

威望 8

现金 91108254 CZB

银行 7484412 CZB

黄金 8888

比特币 888

注册时间 2003-08-18

发表于:2007-10-16 20:10:54   |  只看该作者   |  转账至  金狐
上面的程序不太适合大量的数据操作。应该分开两步来,第一步找出B的最小的id,也就是要找出要减去的步长,第二部再update。SQL复合语句多并不是好事
时间、时间、时间
6楼
编辑   |    引用    回帖
关闭    高亮    置顶   |    移动    回收站   |    -6删帖    删帖    |   
水柔儿

正式会员

静水深流

贴子 763

精华 0

积分 399

信用 0

竞猜 0

魅力 35

威望 0

现金 50 CZB

银行 0 CZB

黄金 0

比特币 0

注册时间 2006-08-02

发表于:2007-10-16 22:10:30   |  只看该作者   |  转账至  水柔儿
引用:
原帖由 金狐 于 2007-10-16 20:01 发表
上面的程序不太适合大量的数据操作。应该分开两步来,第一步找出B的最小的id,也就是要找出要减去的步长,第二部再update。SQL复合语句多并不是好事
呵呵 本来存储过程都打算省略了。。。。
我想你,已经到泛滥的极限
即使在你身边,我依然想着你
7楼
编辑   |    引用    回帖
关闭    高亮    置顶   |    移动    回收站   |    -6删帖    删帖    |   
xl_neu

清风车影

正式会员

翻唱歌迷

贴子 770

精华 0

积分 385

信用 0

竞猜 0

魅力 0

威望 0

现金 166 CZB

银行 7660 CZB

黄金 0

比特币 0

注册时间 2005-07-28

发表于:2007-10-19 21:10:50   |  只看该作者   |  转账至  xl_neu
为什么不用程序操作呢
需要使用SQL是什么情况?
知识改变命运
8楼
编辑   |    引用    回帖
关闭    高亮    置顶   |    移动    回收站   |    -6删帖    删帖    |   
IceCool

贵宾

贴子 86715

精华 5

积分 44263

信用 0

竞猜 0

魅力 1313

威望 3

现金 502369 CZB

银行 0 CZB

黄金 0

比特币 0

注册时间 2003-08-19

发表于:2007-10-20 09:10:38   |  只看该作者   |  转账至  IceCool
不是经常改 有时候需要直接修改数据库里的参数 用程序不是更麻烦
9楼
编辑   |    引用    回帖
关闭    高亮    置顶   |    移动    回收站   |    -6删帖    删帖    |