Ver Mensaje Individual
  #11 (permalink)  
Antiguo 11/05/2009, 23:27
Avatar de huesos52
huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 10 meses
Puntos: 360
Respuesta: COnsulta a tabla autorelacionada

Amj...
La verdad tu tema me inquietó bastante, nunca lo había leído. Por lo poco que he entendido, las relaciones jerárquicas se consideran con un único nodo root. De root pueden surgir parents que es el caso en este ejemplo. Estos a su vez, tener hijos y los hijos hojas. Por la forma como me mostraste el ejemplo de la salida que quieres, parece ser que tuvieras dos nodos root.

Con respecto a lo que preguntas, cuando se inicia un nodo, se hace recursivamente, es por esto, que si empiezas en 1 va a recorrer todo el árbol.

En mi concepto, te haría falta llenar un poco mas tu tabla.

Te comparto un ejemplo, donde comprendí el funcionamiento de nodos... (Como es de un libro te lo escribo)
Código sql:
Ver original
  1. SELECT *
  2. FROM more_employees;
  3. EMPLOYEE_ID MANAGER_ID FIRST_NAME LAST_NAME TITLE SALARY
  4. ----------- ---------- ---------- ---------- ------------- ----------
  5. 1 James Smith CEO 800000
  6. 2 1 Ron Johnson Sales Manager 600000
  7. 3 2 Fred Hobbs Sales Person 200000
  8. 4 1 Susan Jones Support Manager 500000
  9. 5 2 Rob Green Sales Person 40000
  10. 6 4 Jane Brown Support Person 45000
  11. 7 4 John Grey Support Manager 30000
  12. 8 7 Jean Blue Support Person 29000
  13. 9 6 Henry Heyson Support Person 30000
  14. 10 1 Kevin Black Ops Manager 100000
  15. 11 10 Keith Long Ops Person 50000
  16. 12 10 Frank Howard Ops Person 45000
  17. 13 10 Doreen Penn Ops Person 47000
Fijate como se establecen los nodos.
Código sql:
Ver original
  1. SELECT employee_id, manager_id, first_name, last_name
  2. FROM more_employees
  3. START WITH employee_id = 1
  4. CONNECT BY PRIOR employee_id = manager_id;
  5. EMPLOYEE_ID MANAGER_ID FIRST_NAME LAST_NAME
  6. ----------- ---------- ---------- ---------
  7. 1 James Smith
  8. 2 1 Ron Johnson
  9. 3 2 Fred Hobbs
  10. 5 2 Rob Green
  11. 4 1 Susan Jones
  12. 6 4 Jane Brown
  13. 9 6 Henry Heyson
  14. 7 4 John Grey
  15. 8 7 Jean Blue
  16. 10 1 Kevin Black
  17. 11 10 Keith Long
  18. 12 10 Frank Howard
  19. 13 10 Doreen Penn

En este ejemplo, es claro que james smith es el nodo root. Y que ron, susan y kevin son los parents. Es así como funciona la estructura de nodos.

Si el start with lo empezaras cuando first_name = 'susan' solo mostraría la parte del árbol por debajo de susan. (osea jhon grey, jane brown, henry heison, john gray y jean blue)

Si quieres, puedes poner un poco mas de datos, de que forma los llenas y que criterios utilizas para establecer un registro como nodo de otro.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming