Oracle Connect par - seulement retourner le premier niveau d'article de premier niveau
-
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?
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'