查询子行上的序号

时间:2013-12-20 15:34:02

标签: sql oracle oracle10g

我的结构如下:

CREATE TABLE Child (id, parent_id, seq_no);

我需要一个UPDATE语句来为每个父项生成序列号1,2,3等。

例如:

1, 10, 1 
2, 10, 2
3, 10, 3
4, 20, 1
5, 20, 2

如何使用一个SQL查询执行此操作? (Oracle 10)

2 个答案:

答案 0 :(得分:1)

试试这个:

insert into child
select id, parent_id, 
row_number() over (parition by parent_id order by id) seq_no
from parent

答案 1 :(得分:1)

这是更新问题。遗憾的是,Oracle不支持可更新的CTE(如SQL Server),也不支持带有update语句的join。以下是在Oracle中执行此操作的一种方法:

update child
    set seq_no = (select count(*)
                  from child c2
                  where c2.parent_id = child.parent_id and
                        c2.id <= child.id
                 );