Adăugarea de noi rânduri (Valoarea NULL) la un multiplu de copil părinte ierarhie

0

Problema

Am mai multe părinte copil ierarhie alcătuită de 100k+ înregistrări. Acesta este un subset mic.

Copil Părinte
1 2
1 3
2 3

Am nevoie pentru a merge prin fiecare valoare din coloana Părinte și verificați dacă aceeași valoare, de asemenea, există în coloana Copilului. Dacă nu, apoi a crea un rând cu (valoarea NULL). În acest exemplu valoarea 3 nu există în Copil coloana asa ca am nevoie de ea pentru a crea un nou rând cu valorile (3, NULL).

Copil Părinte
3 NULL
1 2
1 3
2 3

Codul meu nu se întoarce o eroare dar nu face ceea ce vreau să fac.

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

Am obține mai multe rânduri noi cu (NULL,NULL), dar 0 randuri (valoarea NULL). Trebuie cumva mereu trecem mai departe la altcineva clauza, atunci când există atât de multe rânduri noi cu (NULL, NULL), dar nu sunt sigur de ce.

Folosind SQL Server Management Studio 17. Orice ajutor este apreciat.

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

Cel mai bun răspuns

1

Tu nu ar trebui să folosească case aici, dar un sine stânga în loc să se alăture:

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

Vezi live demo pe Db<>Vioara

2021-11-23 14:53:26

În alte limbi

Această pagină este în alte limbi

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