La adición de nuevas filas (Valor NULO) a un múltiplo de padre e hijo de la jerarquía de

0

Pregunta

Tengo un múltiplo de padre e hijo jerarquía consta de 100k+ registros. Este es un pequeño subconjunto.

Niño Los padres
1 2
1 3
2 3

Necesito ir a través de cada valor de la columna de los Padres y de comprobar si el valor existe también en la columna del Niño. Si no lo hace, a continuación, crear una fila con (valor NULO). En este ejemplo, el valor 3 no existe en el Niño columna de forma que se necesitan para crear una nueva fila con los valores (3, NULL).

Niño Los padres
3 NULL
1 2
1 3
2 3

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

INSERT IGNORE INTO #table (child, parent)
SELECT (CASE WHEN parent not in (Select child from #table) THEN parent END) as child, Null
FROM #table

Consigo muchas nuevas filas con (NULL,NULL) pero 0 filas con (valor NULO). Debe de alguna manera siempre vaya a la cláusula else cuando hay tantas nuevas filas con (NULL, NULL), pero no sé por qué.

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

parent-child sql sql-server
2021-11-23 14:41:35
1

Mejor respuesta

1

Usted no debería usar case aquí, pero un auto left join en lugar:

INSERT IGNORE INTO #table (child, parent)
SELECT DISTINCT t1.parent, NULL
FROM #table t1
LEFT JOIN #table t2
    ON t1.parent = t2.child
WHERE t2.child IS NULL

Ver demostración en vivo en Db<>Violín

2021-11-23 14:53:26

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................