Oracle Connect par - seulement retourner le premier niveau d'article de premier niveau

StackOverflow https://stackoverflow.com//questions/9701237

  •  13-12-2019
  •  | 
  •  

Question

J'essaie de sélectionner un produit parent et tous ses produits enfants;Exploser la facture de matériaux (BOM), si vous voulez.Cela devrait être une tâche assez simple, mais je ne reçois pas le résultat attendu.

SELECT LEVEL,
   serial_no,
   part_no
FROM ifsapp.part_serial_catalog_tab
   START WITH serial_no       = 'Serial1'
   AND part_no                = 'ParentPart'
   CONNECT BY PRIOR serial_no = superior_serial_no
   AND part_no                = superior_part_no;

Je m'attendrais à voir les résultats suivants:

1 Serial1 ParentPart
2 Serial1 ChildPart1
2 Serial2 ChildPart2

.. Cependant, je ne reçois que la première rangée (parent) renvoyée.

Remarque: la table a une clé composite de Part_no / Serial_no, et comme vous pouvez le constater à partir de cet exemple, le parent hérite généralement du sérial_no de l'un des enfants.Je ne suis pas sûr que l'une ou l'autre de ces questions devrait compliquer beaucoup les choses, mais quelque chose ne va clairement pas.

Pourquoi ma requête ne fait-elle pas forcer la hiérarchie complète?

Était-ce utile?

La solution

Un collègue m'a aidé à la solution:

SELECT LEVEL,
   serial_no,
   part_no
FROM ifsapp.part_serial_catalog_tab
   START WITH serial_no       = 'Serial1'
   AND part_no                = 'ParentPart'
   CONNECT BY PRIOR serial_no = superior_serial_no
   AND PRIOR part_no          = superior_part_no;

Tous les exemples que j'ai vus font référence aux tables avec une clé simple.Avec une clé composite telle que celle-ci, oui, je dois spécifier une relation entre les deux colonnes, mais j'ai également besoin du deuxième mot clé précédent:

   CONNECT BY PRIOR serial_no = superior_serial_no
   AND PRIOR part_no          = superior_part_no;

Mon SQL était syntaxiquement correct, mais pas pour la requête, je pensais que je manquerais!

Autres conseils

Je suppose que cela limite le résultat à seulement le premier enregistrement.

AND part_no                = 'ParentPart'

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top