2017-06-21 66 views
0

所以我有以下格式的層次結構表更新列:層次結構表中,對於一個特定的水平

Instance | Parent | Serial | Hierarchy Level 
    1 | 0 | x0 |   1 
    2 | 0 | x1 |   1 
    3 | 1 | xy0 |   2 
    4 | 1 | xy1 |   2 
    5 | 2 | - |   2 
    6 | 2 | - |   2 
    7 | 2 | - |   2 

而我希望得到的是:

Instance | Parent | Serial | Hierarchy Level 
    1 | 0 | x0 |   1 
    2 | 0 | x1 |   1 
    3 | 1 | xy0 |   2 
    4 | 1 | xy1 |   2 
    5 | 1 | x0 |   2 
    6 | 2 | x1 |   2 
    7 | 2 | x1 |   2 

所有1級的有一個序列號。我的目標是更新Serial爲空的所有2級,爲此,我必須選擇父級的序列號。有人能給我一個關於如何去做這件事的想法。

這是我試過到目前爲止(以及幾個其他的事情,但沒有成功):

UPDATE "USER"."TABLE" AS A1 
SET A1.SERIAL = 
(
    SELECT "SERIAL" 
    FROM "USER"."TABLE" AS A2 
    WHERE A2."PARENT" = A1."INSTANCE" 
) 
WHERE "SERIAL" IS NULL 
AND "HIERARCHYLEVEL" = 2 

原產於爪哇,我覺得這應該是輕鬆了許多,但我遇到很多困難。任何幫助將非常感激。

+0

看起來您的父級和實例標準在子查詢中是向後的。另外,數據結構中存在冗餘,可能導致數據差異。層次級別應該由行的父母數決定(並由此確定)。通過存儲該值,您可能會引入衝突:與現實不符的數據值。 –

+0

@rd_nielsen乾杯!事實上,父母和實例標準是倒退的!這樣一個簡單的修復;不安,我不得不浪費你的時間!非常感謝你。 –

回答

0

對不起,這個愚蠢的問題。簡單的解決辦法是在OP響應中解釋@rd_nielsen:

UPDATE "user"."table" AS A1 
SET A1.serial = 
(
    SELECT "serial" 
    FROM "user"."table" AS A2 
    WHERE A1."PARENT" = A2."INSTANCE" 
) 
WHERE "serial" IS NULL 
AND "HIERARCHYLEVEL" = 2