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.

Añadiendo nuevas filas (Valor, NULL) a una jerarquía de múltiples padres e hijos.

Tengo una jerarquía de múltiples padres y hijos que consta de más de 100k registros. Este es un pequeño subconjunto.

Niño Padre
1 2
1 3
2 3

Necesito revisar cada valor de la columna Padre y comprobar si el mismo valor también existe en la columna Hijo. Si no existe, entonces crear una fila con (valor, NULL). En este ejemplo, el valor 3 no existe en la columna Hijo, por lo que necesito crear una nueva fila con los valores (3, NULL).

Niño Padre
3 NULL
1 2
1 3
2 3

Mi código no devuelve un error, pero no hace lo que quiero que haga.

INSERT INTO #table (niño, padre)
SELECT (CASE WHEN padre not in (Select niño from #table) THEN padre END) as niño, Null
FROM #table

Obtengo muchas filas nuevas con (NULL, NULL), pero 0 filas con (valor, NULL). Debe saltar siempre a la cláusula else cuando hay tantas filas nuevas con (NULL, NULL), pero no estoy seguro de por qué.

Usando SQL Server Management Studio 17.
Cualquier ayuda es muy apreciada.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución

    El problema con el código actual es que la instrucción SELECT está devolviendo tanto las nuevas filas con (valor, NULL) como las filas existentes con (NULL, NULL). Para filtrar las filas existentes, podemos agregar una cláusula WHERE para verificar si el valor hijo es NULL o no.

    INSERT INTO #tabla (hijo, padre)
    SELECT padre, NULL
    FROM #tabla
    WHERE padre NOT IN (SELECT hijo FROM #tabla WHERE hijo IS NOT NULL)
    

    Este código solo insertará nuevas filas con valores de padre que no existen como valores de hijo en la tabla.

Comments are closed.