我的结构如下:
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)
答案 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
);