2017-06-21 5 views
0

j'ai donc une table de hiérarchie dans le format suivant:tableau Hiérarchie, colonne de mise à jour pour un niveau

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 

Et ce que je voudrais faire est:

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 

Tous les niveaux des 1 ont un numéro de série. Mon but est de mettre à jour tous les niveaux 2 où Serial est null, et pour ce faire, je devrais sélectionner le numéro de série du parent. Quelqu'un pourrait-il me donner une idée de la façon de s'y prendre?

C'est ce que je l'ai essayé jusqu'à présent (ainsi que deux autres, en vain):

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 

Originaire de Java, je me sens comme cela devrait être beaucoup plus facile, mais J'ai beaucoup de difficultés avec ça. Toute aide serait très appréciée.

+0

Il semble que votre critère parent et instance soit en arrière dans la sous-requête. En outre, il existe une redondance pouvant entraîner des écarts de données dans votre structure de données. Le niveau hiérarchique devrait être déterminable (et donc déterminé) par le nombre de parents d'une rangée. En stockant cette valeur, vous risquez d'introduire un conflit: une valeur de données qui est en contradiction avec la réalité. –

+0

@rd_nielsen A bientôt !!! Le critère parent et instance était, en fait, à reculons! Une telle solution simple; contrarié je devais perdre ton temps! Merci beaucoup. –

Répondre

0

Désolé pour la question stupide. La simple correction était la suivante: @rd_nielsen expliqué dans les réponses OP:

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