将新行 (Value, NULL) 添加到多父子层次结构

Adding new rows (Value, NULL) to a multiple parent child hierarchy

我有一个包含 100k+ 记录的多父子层次结构。这是一小部分。

Child Parent
1 2
1 3
2 3

我需要遍历 Parent 列中的每个值,并检查 Child 列中是否也存在相同的值。如果没有,则创建一行(值,NULL)。在此示例中,子列中不存在值 3,因此我需要它来创建一个包含值 (3, NULL) 的新行。

Child Parent
3 NULL
1 2
1 3
2 3

我的代码没有 return 错误,但它没有按照我的要求执行。

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

我得到了很多带有 (NULL,NULL) 的新行,但是有 0 行带有 (value, NULL)。当有这么多带有 (NULL, NULL) 的新行但不确定原因时,它必须以某种方式总是跳到 else 子句。

使用 SQL Server Management Studio 17。 非常感谢任何帮助。

你不应该在这里使用 case,而应该使用 self left join:

INSERT 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

查看 Db<>Fiddle

上的现场演示