Sql 查询子行上的填充序列号

Sql 查询子行上的填充序列号,sql,oracle,oracle10g,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尝试以下方法: insert into child select id, parent_id, row_number() over (parition by parent_id

我的结构如下:

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

尝试以下方法:

insert into child
select id, parent_id, 
row_number() over (parition by parent_id order by id) seq_no
from parent
这是一个更新问题。不幸的是,Oracle不支持像SQL Server这样的可更新CTE,也不支持使用join语句进行更新。以下是在Oracle中执行此操作的一种方法:

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

我使用了row_number解决方案,将其修改为使用更新,这非常缓慢,但我同意这是一个更优雅的选项。使用row_number动态生成seq_no的视图可能比在表中维护值更简单。在添加和删除数据时,您不必担心计算新的或更改的值。当然,这取决于你的需要。