Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Sp para tabla recursiva. (https://www.clubdelphi.com/foros/showthread.php?t=61770)

NPIdea 21-11-2008 10:58:11

Sp para tabla recursiva.
 
Hola a todos.

He estado buscando en el foro y en la web la solución, pero no hay froma de solucionarlo.

Tengo una tabla con dos campos Principal, Secundario

Entonces puedo meter datos jerarquicos en los dos formando un arbol.
Código Delphi [-]
Principal  Secundario
1                 5
1                 3
2                 4
5                10

entonces lo que me gustaría es que elijiendo el registro Principal=1 me devolviese
3 filas, los dos primeros de principal=1 y anidar el Secundario=5 para devolverme la tercera fila como Principal=5 y Secundario =10.


El resultado sería
Código Delphi [-]
Principal    Secundario
1                5
1                3
5              10


He buscado sobre temas de recursividad pero me sale todo para Oracle y MSServer y no sé como trabnsformarlo a Interbase.


Muchas gracias.

olbeup 21-11-2008 11:23:46

Hola NPIdea,

No entiendo tu pregunta.

Para mostrar 3 registros de una base de datos:
Código SQL [-]
SELECT TOP 3
    PRINCIPAL
    ,SECUNDARIO
  FROM Tabla
  WHERE PRINCIPAL = 1
En tu caso solo mostrar 2 por que no cumple con WHERE,

Un saludo

NPIdea 21-11-2008 11:36:46

Bueno, por fin tras horas de estudio por la web y el IBExpert
 
La solucián era:

Código Delphi [-]
CREATE PROCEDURE NEW_PROCEDURE (
    acometedor integer)
returns (
    id integer,
    acometido integer)
as
begin
    FOR SELECT id,acometido
     FROM MIA
     WHERE id = :acometedor
     INTO :id,:acometido
 DO BEGIN

     if (acometido is not null)
        then begin
               SUSPEND;
           for select id, acometido
               from NEW_PROCEDURE(:acometido)
           into :id,:acometido
           do begin
           if (acometido is not null)
              then SUSPEND;
           end
         end
    END
end^

De esta forma va buscando recursivamente y busca en los dos campos el orden jerarquico.

Gracias.

Perdón, sustituir id por PRINCIPAL y acometido por SECUNDARIO.

rastafarey 26-11-2008 13:14:14

Resp
 
Esto hace lo que quieres.
Código SQL [-]
Select "Principal", 
       "Secundario"
From "Tb" Where "Principal" = 1 Or "Principal" in (Select
       "Secundario"
      From "Tb" Where "Principal" = 1)

te digo si quieres formar un arbol el campo secundario deberia ser nulo cuando es un nodo raiz. De esta manera las consultas seria mas facil.


La franja horaria es GMT +2. Ahora son las 23:37:26.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi