Besoin d'un Oracle hiérarchique requête qui retourne uniquement le plein arbres pour les dossiers où les enfants correspondre à une chaîne de recherche
Voici l'exemple complet de l'ensemble de données pour cette requête sans aucune élagage des arbres où aucun nœud correspond à la chaîne de recherche:
Niveau parent id de texte --------------------------------------------- 0 0 1 toplevel 1 1 2 foo 1 1 3 sumthin d'autre 1 1 4 foo 0 0 7 toplevel2 1 7 8 secondlevel 1 7 9 anothersecondlevel
J'ai besoin de retourner les éléments suivants si l'utilisateur effectue une recherche sur 'foo':
0 0 1 toplevel 1 1 2 foo 1 1 4 foo
Le cas réel est un peu plus complexe (c'est à dire, trois niveaux dans l'arbre que je veux revenir), mais celui-ci saisit de la question. En anglais, le retour de l'ancêtre de l'arbre pour un nœud qui correspond à la chaîne de recherche de départ au nœud correspondant sur colonne de texte et retour tous les ancêtres.
Je suis nouveau à l'Oracle (au moins récemment), et ont essayé d'ajouter de la CONNECTER PAR la clause sans succès - renvoie toujours le suivant:
1 1 2 foo 1 1 4 foo
PS - l'oracle docs et des exemples sur ce que cela implique que CONNECT_BY_ROOT permettra de saisir les ancêtres, mais il semble faire, c'est le retour de haut niveau (RACINE) valeurs.
J'ai posé une question similaire il y a longtemps - peut-être des réponses à ces questions aideront stackoverflow.com/questions/301817/...
OriginalL'auteur bchesley | 2011-10-13
Vous devez vous connecter pour publier un commentaire.
De parcourir de bas en haut l'important est de l'ordre des valeurs après la
CONNECT BY PRIOR
)Le
order by
est utilisée pour inverser la sortie (comme la racine de foo) et ledistinct
supprime le doublon toplevel valeurs:Remarque: si vous ajoutez à un enfant de foo et de passer la CONNCT PRÉALABLE id = parent, vous obtiendrez les enfants
si vous voulez voir l'ensemble de la hiérarchie, vous pourrez trouver le haut de l'arbre
(par la recherche de la ligne, sans parents)
ensuite utiliser ce que le DÉBUT AVEC l'id (et inverse l'ordre de l'arbre transversal dans la requête externe, id = parent) :
pas certain de savoir pourquoi un tri ne fonctionne pas, peut-être vous avez besoin de marcher à partir du haut vers le bas ?
Le tri et l'élimination des dupes est maintenant prêt. Merci à tous pour l'aider!
pas de problème, n'oubliez pas d'accepter la réponse correcte.
OriginalL'auteur Kevin Burton
En fonction de votre utilisation de la colonne de NIVEAU (comme pour mon commentaire).
D'Info sur l'Oracle des Requêtes Hiérarchiques: http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/queries003.htm
Cela renvoie à ce que vous demandez si le NIVEAU est la pseudo-colonne Oracle:
Retourne:
Si le NIVEAU est une colonne de votre table, alors:
Retourne:
Espère que ça aide...
OriginalL'auteur Ollie
Mon point de vue sur "Oracle hiérarchique requête qui retourne uniquement le plein arbres" partie serait:
Pour filtrer les arbres à celles contenant le précis des enfants, vous devez ajouter une autre condition à la dernière OÙ filtrer INITIAL_Parent_ID.
La requête devient:
OriginalL'auteur PiC