Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Consulta Recursiva

Estas en el tema de Consulta Recursiva en el foro de SQL Server en Foros del Web. Buenas!!!! Tengo un problema con una consulta y no se como sacar los resultados, espero que alguno me pueda ayudar. Quiero hacer una consulta con ...
  #1 (permalink)  
Antiguo 15/09/2008, 05:52
 
Fecha de Ingreso: abril-2005
Ubicación: España - Madrid
Mensajes: 236
Antigüedad: 19 años, 1 mes
Puntos: 2
Pregunta Consulta Recursiva

Buenas!!!!

Tengo un problema con una consulta y no se como sacar los resultados, espero que alguno me pueda ayudar.

Quiero hacer una consulta con estos datos:

Tabla 1
-----------

Identificador
Descripcion

Tabla 2
------------
Identificador_Padre
Identificador_Hijo


De tal forma que en la tabla 1 tendre:

Id || Descripcion
------------------------
1 Descripcion1
2 Descripcion2
3 Descripcion3
4 Descripcion4
5 Descripcion5


en la tabla 2:

id_padre || id_hijo
--------------------------
1 2
1 3
3 4
4 5

De tal forma que si lo pintamos en arbol lo datos quedarian asi:

1 -> 2
-> 3 -> 4
-> 5

No deja de ser una tabla con padres e hijos, en la tabla 1 guardo todos los posibles nodos que tiene mi arbol, y en la tabla 2 guardo las relaciones que existen entre ambas, es decir quien es el padre de quien.

Alguna idea?

Muchas gracias
  #2 (permalink)  
Antiguo 15/09/2008, 09:21
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Consulta Recursiva

Si no quieres manejar recursividad en la ayuda de SQL Server viene un ejemplo de como expandir jerarquias..

en ingles lo encuentras como hierarchical information.

Te anexo el codigo...para mayor referencia checalo en la ayuda..

Código:
CREATE PROCEDURE expand (@current char(20)) as
SET NOCOUNT ON
DECLARE @level int, @line char(20)
CREATE TABLE #stack (item char(20), level int)
INSERT INTO #stack VALUES (@current, 1)
SELECT @level = 1

WHILE @level > 0
BEGIN
   IF EXISTS (SELECT * FROM #stack WHERE level = @level)
      BEGIN
         SELECT @current = item
         FROM #stack
         WHERE level = @level
         SELECT @line = space(@level - 1) + @current
         PRINT @line
         DELETE FROM #stack
         WHERE level = @level
            AND item = @current
         INSERT #stack
            SELECT child, @level + 1
            FROM hierarchy
            WHERE parent = @current
         IF @@ROWCOUNT > 0
            SELECT @level = @level + 1
      END
   ELSE
      SELECT @level = @level - 1
END -- WHILE

Edit:
En esta liga tambien lo podras encontrar...
Cómo mostrar Expandir jerarquías mediante SQL Server



Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.

Última edición por Andres95; 15/09/2008 a las 09:23 Razón: liga
  #3 (permalink)  
Antiguo 16/09/2008, 03:46
 
Fecha de Ingreso: abril-2005
Ubicación: España - Madrid
Mensajes: 236
Antigüedad: 19 años, 1 mes
Puntos: 2
Respuesta: Consulta Recursiva

Muchas Gracias,

La idea es usar CTE y no tablas temporales pero no se por donde cogerlo.
  #4 (permalink)  
Antiguo 17/09/2008, 07:59
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Consulta Recursiva

Bueno, buscando en la red encontre esto:

http://www.sqlservercentral.com/arti...erarchy/62858/
  #5 (permalink)  
Antiguo 18/09/2008, 04:10
 
Fecha de Ingreso: abril-2005
Ubicación: España - Madrid
Mensajes: 236
Antigüedad: 19 años, 1 mes
Puntos: 2
Respuesta: Consulta Recursiva

Ok, al final lo pude hacer.

Aqui viene muy clarito como usarlo.

Gracias a todos.
  #6 (permalink)  
Antiguo 18/09/2008, 11:30
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Consulta Recursiva

gracias por la pagina...........una mas para mi coleccion...........
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:44.