将新行 (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
上的现场演示
我有一个包含 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
上的现场演示