2013-12-20 40 views
0

我的結構如下:查詢關於子行填充序列號

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查詢? (甲骨文10)

+0

這可能是簡單的有一個生成上飛'seq_no'視圖,使用'ROW_NUMBER()',而不是維護表中的值。隨着數據的添加和刪除,您不必擔心計算新的或更改的值。當然,取決於你的需求。 –

回答

1

這是一個更新問題。不幸的是,Oracle不支持可更新的CTE(如SQL Server),也不支持updatejoin語句。下面是Oracle這樣的一種方法:

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

我用row_number()解決方案(修改它與更新一起工作),這是很慢btw,但我會同意這是更多優雅的選擇。 – wvdz

1

試試這個:

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

當然...因爲我發佈了它,所以我想了row_number:p – wvdz