Recursividad en SQL

Como todo buen diseñador de base de datos sabe, es bastante común encontrarse con entidades recursivas en el diseño de nuestra BD.

La manera más sencilla y clara que es usando la sentencia WITH que es la que usaremos para hacer de manera sencilla la consulta recursiva.
Muchos que ya tienen experiencia en este campo me dirán, ¿y por qué no usas simplemente un cursor para lograrlo?, la respuesta es sencilla, el motor ejecuta de manera más eficiente y con menos consumo de recursos del servidor que usando dicho cursor.
Un algoritmo recursivo siempre tiene que tener:
     – Un caso base (donde terminar)
     – Un caso iterativo (donde ir iterando a un escenario que cada vez se aproxime más al caso base)
En SQL Server se haría con una CTE. Vamos a usar como ejemplo una tabla con padres e hijos donde nuestro caso base va a ser aquel padre que no es hijo de nadie, tendría esta forma:


BEGIN
WITH RecursiveSearch AS
(
    /*Caso base*/
    SELECT
    PH.Id, PH.PadreId, 0 AS LEVEL
    FROM
    PersonasHumanas PH
    WHERE PH.PadreId IS NULL
    
  UNION ALL

    /*Caso recursivo*/
    SELECT
    PH.Id, PH.PadreId, RecursiveSearch.Level + 1 AS LEVEL
    FROM
    PersonasHumanas PH
    INNER JOIN RecursiveSearch RecursiveSearch on RecursiveSearch.Id = PH.PadreId
)
    SELECT * FROM RecursiveSearch

END





También te podría gustar...

Deja un comentario

Tu dirección de correo electrónico no será publicada.