J'ai une table sous oracle 8i qui se présente sous cette forme :
En règle générale, chaque id ne peut être parent qu'une seule fois (parfois 2, quand la personne qui a ajouté un enregistrement a fait des bêtises ).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 id |id_parent | caractéristique 1 |0 |carac_1 2 |0 |carac_2 3 |1 |carac_1 4 |3 |carac_3
Un enfant n'a qu'un seul parent.
Un et un seul enfant peut hériter de la caractéristique du parent.
La caractéristique peut se transmettre sur 5 générations maximum.
La caractéristique ne peut pas exister sur 2 générations différentes.(si un enregistrement possède une caractéristique, seul ses parents ou ses enfants pourront posséder la même).
Je cherche à garder uniquement le ou les derniers enregistrements, pas les parents. Je souhaite également savoir depuis combien de générations la caractéristique existe.Je n'ai pas besoin de garder les enregistrements ou l'ID_parent est 0
Ma requête ressemble actuellement àle level me donne le (nombre de génération -1)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Select id, id_parent, caractéristique, level from Ma_table start with id_parent != 0 connect by prior id = id_parent
Avec ce code, je peux savoir le nombre de générations totales, mais pas celle qui portent la caractéristique. Je peux faire cette vérification via mon langage de développement, mais l'application est déjà assez lente et la table possède quelques milliers d'enregistrements.
Y a-t-il moyen d'affiner plus la echerche, ou de l'effectuer complètement par ddes requetes?
Partager