Přidávání nových řádků (Hodnota NULL), aby více nadřazený podřízený hierarchie

0

Otázka

Mám více rodič dítě hierarchie skládající se ze 100k+ záznamy. To je malá část.

Dítě Rodič
1 2
1 3
2 3

Musím projít každou hodnotu ze sloupce Rodič, a zkontrolujte, zda stejná hodnota existuje také ve sloupci Dítě. Pokud tomu tak není, pak vytvořit řádek s (hodnota NULL). V tomto příkladu hodnota 3 neexistuje v Dítěti sloupec tak, potřebuju to pro vytvoření nového řádku s hodnotami (3, NULL).

Dítě Rodič
3 NULL
1 2
1 3
2 3

Můj kód nevrátí chybu, ale to není to, co chci, aby to udělat.

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

Jsem si mnoho nových řádků s (NULL,NULL), ale 0 řádků s (hodnota NULL). To musí vždy nějak přeskočit do jiného ustanovení, když existuje tolik nových řádků s (NULL, NULL), ale nejsem si jistá, proč.

Pomocí SQL Server Management Studio 17. Jakákoliv pomoc je velmi ceněn.

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

Nejlepší odpověď

1

Byste neměli používat case tady, ale já left join místo:

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

Vidět živé demo na Db<>Housle

2021-11-23 14:53:26

V jiných jazycích

Tato stránka je v jiných jazycích

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