我的結構如下:查詢關於子行填充序列號
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)
我的結構如下:查詢關於子行填充序列號
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)
這是一個更新問題。不幸的是,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
);
我用row_number()解決方案(修改它與更新一起工作),這是很慢btw,但我會同意這是更多優雅的選擇。 – wvdz
試試這個:
insert into child
select id, parent_id,
row_number() over (parition by parent_id order by id) seq_no
from parent
當然...因爲我發佈了它,所以我想了row_number:p – wvdz
這可能是簡單的有一個生成上飛'seq_no'視圖,使用'ROW_NUMBER()',而不是維護表中的值。隨着數據的添加和刪除,您不必擔心計算新的或更改的值。當然,取決於你的需求。 –