A adição de novas linhas (Valor NULO) para um múltiplo de pai e filho hierarquia

0

Pergunta

Eu tenho um múltiplo de pai e filho hierarquia composta de 100k+ registos. Este é um pequeno subconjunto.

Criança Pai
1 2
1 3
2 3

Eu preciso ir através de cada valor da coluna Principal e verifique se o mesmo valor também existe na coluna da Criança. Se não, em seguida, criar uma linha com (valor NULO). Neste exemplo, o valor 3 não existe na Criança coluna, de modo que eu preciso para criar uma nova linha com os valores (3, NULL).

Criança Pai
3 NULL
1 2
1 3
2 3

Meu código não retornará um erro, mas ele não fizer o que eu quero fazer.

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

Eu recebo muitas novas linhas com (NULL,NULL) mas 0 linhas com (valor NULO). Ele deve, de alguma forma, sempre vá em frente para a cláusula else, quando há tantos novas linhas com (NULL, NULL), mas não sei por que.

Usando o SQL Server Management Studio 17. Qualquer ajuda é muito apreciada.

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

Melhor resposta

1

Você não deve usar case até aqui, mas uma auto-associação esquerda em vez disso:

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

Veja demonstração ao vivo de Db<>Violino

2021-11-23 14:53:26

Em outros idiomas

Esta página está em outros idiomas

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