L'ajout de nouvelles lignes (Valeur NULLE) à un multiple de hiérarchie parent-enfant

0

La question

J'ai plusieurs hiérarchie parent-enfant composé de+ de 100k enregistrements. C'est un petit sous-ensemble.

Enfant Parent
1 2
1 3
2 3

J'ai besoin d'aller à travers chaque valeur de la colonne Parent et de vérifier si la même valeur existe aussi dans la colonne de l'Enfant. Si elle n'en a pas, de créer une ligne avec (valeur NULL). Dans cet exemple, la valeur 3 n'existe pas dans l'Enfant de la colonne, de sorte que j'en ai besoin pour créer une nouvelle ligne avec les valeurs (3, NULL).

Enfant Parent
3 NULL
1 2
1 3
2 3

Mon code ne retourne pas une erreur, mais il ne veut pas faire ce que je veux faire.

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

Je reçois beaucoup de nouvelles lignes avec (NULL,NULL), mais 0 les lignes avec (valeur NULL). Il doit en quelque sorte toujours passer à la clause else quand il y a beaucoup de nouvelles lignes avec (NULL, NULL), mais ne sais pas pourquoi.

À l'aide de SQL Server Management Studio 17. Toute aide est grandement appréciée.

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

La meilleure réponse

1

Vous ne devriez pas utiliser case ici, mais une auto-jointure gauche à la place:

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

Voir la démo en direct sur Db<>Violon

2021-11-23 14:53:26

Dans d'autres langues

Cette page est dans d'autres langues

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