L'aggiunta di nuove righe (Valore, NULL), ad un multiplo gerarchia padre-figlio

0

Domanda

Ho una multipla gerarchia padre-figlio, composto di 100k+ record. Questo è un piccolo sottoinsieme.

Bambino Padre
1 2
1 3
2 3

Ho bisogno di passare attraverso ogni valore dalla colonna Genitore e verificare se lo stesso valore esiste anche nella colonna Bambino. Se non, quindi creare una riga con (valore NULL). In questo esempio il valore 3 non esiste nel Bambino, in colonna, quindi ho bisogno di creare una nuova riga con i valori (3, NULL).

Bambino Padre
3 NULL
1 2
1 3
2 3

Il mio codice non viene restituito un errore, ma non fa quello che voglio fare.

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

Ricevo molte nuove righe con (NULL,NULL), ma 0 righe con (valore NULL). Essa deve in qualche modo sempre di andare avanti per la clausola else quando ci sono così tante nuove righe (NULL, NULL), ma non so perché.

Utilizzo di SQL Server Management Studio 17. Qualsiasi aiuto è molto apprezzato.

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

Migliore risposta

1

Non si deve usare case qui, ma un'auto left join invece:

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

Vedere demo live su Db<>Violino

2021-11-23 14:53:26

In altre lingue

Questa pagina è in altre lingue

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