1. 程式人生 > >關於Rack()自增長的一則雙表關聯更新

關於Rack()自增長的一則雙表關聯更新

oracle 排序 rank

A表(tb_abc):


AB
1aa
0200
2bb0300
3cc0500
4dd1800
5ee2200
6ff3300

B表(tb_abcc):


A
B
1aa
(0201)
2aa(0202)
3bb(0301)
4bb(0302)
5bb(0303)
6cc(0501)

括號裏是預期值

規則: 通過B表的a字段匹配A表的a字段,並讀取A表的b字段,按照該值依次增數寫入B表b字段

實現:

update
  tb_abcc c
set
  c.b =
  (select
    tmp.str
  from
    (select
      b.rowid rd,
      b.a,
      substr(a.b, 1, 2) || lpad(
        (
          rank () over (partition by b.a
            order by b.rowid)
        ),
        2,
        0
      ) str
    from
      tb_abc a,
      tb_abcc b
    where a.a = b.a) tmp
  where c.rowid = tmp.rd)
where exists
  (select
    ‘x‘
  from
    (select
      b.rowid rd,
      b.a,
      substr(a.b, 1, 2) || lpad(
        (
          rank () over (partition by b.a
            order by b.rowid)
        ),
        2,
        0
      ) str
    from
      tb_abc a,
      tb_abcc b
    where a.a = b.a) tmp
  where c.rowid = tmp.rd);

6 rows updated

select * from tb_abcc;

A B

---- ------

aa 0201

aa 0202

bb 0301

bb 0302

bb 0303

cc 0501


6 rows selected

本文出自 “沙羅雙樹園” 博客,請務必保留此出處http://mmx813.blog.51cto.com/12884864/1923304

關於Rack()自增長的一則雙表關聯更新