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.
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.
Este código solo insertará nuevas filas con valores de padre que no existen como valores de hijo en la tabla.