es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Connectby con más de una raíz y dinámica.

Tengo esta tabla “con.cuenta”

imagen

Uso connectby para obtener los niveles:

SELECT t.cue_id, t.cue_id_ref, (t.level+1) nivel, t.branch 
FROM connectby('con.cuenta', 'cue_id', 'cue_id_ref', '1', 0,'/')
AS t(cue_id bigint, cue_id_ref bigint, level int,branch text)

imagen

El problema es que tengo varias raíces y el método connectby funciona con una sola raíz. ¿Alguna alternativa?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Si tiene múltiples raíces en su tabla “con.cuenta” y el método connectby funciona con una sola raíz, puede intentar usar una consulta recursiva en su lugar. Con una consulta recursiva, puede manejar múltiples raíces e iterar a través de la tabla hasta que todos los nodos hayan sido procesados.

    Aquí hay un ejemplo de consulta que utiliza una consulta recursiva para obtener los niveles de todos los nodos en la tabla “con.cuenta”:

    WITH RECURSIVE cuenta_tree AS (
      SELECT cue_id, cue_id_ref, 1 AS nivel, CAST(cue_id AS TEXT) AS rama
      FROM con.cuenta
      WHERE cue_id_ref IS NULL -- seleccionar todas las raíces
    
      UNION ALL
    
      SELECT con.c.cue_id, con.c.cue_id_ref, cta.nivel+1, CONCAT(cta.rama, '/', con.c.cue_id)
      FROM con.cuenta con.c
      JOIN cuenta_tree cta ON c.cue_id_ref = cta.cue_id
    )
    SELECT cue_id, cue_id_ref, nivel, rama FROM cuenta_tree;
    

    Esta consulta comienza seleccionando todos los nodos raíz (donde “cue_id_ref” es nulo) y asignando el nivel 1 y el ID del nodo raíz como su rama. Luego se une recursivamente con la tabla “con.cuenta” para encontrar los nodos hijos, incrementa el nivel y construye el camino de la rama.

    El resultado será una lista de todos los nodos en la tabla “con.cuenta” con sus respectivos niveles y caminos de la rama.

Comments are closed.