增加新的行(价值,NULL)多父母儿童的层次结构

0

的问题

我有一个父子层次组成的100k记录。 这是一个很小的子集。

儿童
1 2
1 3
2 3

我需要经过每个的价值从柱父母和检查,如果相同的价值也存在柱子。 如果没有,那么创建一个行(价值,NULL)。 在这个例子值3中不存在儿童柱,所以我需要它来创建一个新的行与价值(3,NULL)。

儿童
3
1 2
1 3
2 3

我的代码不会返回一个错误,但它不会做什么我想要它做的。

INSERT IGNORE 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行(价值,NULL)。 它必须以某种方式总是跳过前面的其他条款时有这么多的新行(NULL,NULL),但不知道为什么。

使用SQL服务器的管理工作室17. 任何帮助是极大的赞赏。

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

最好的答案

1

你不应该使用 case 在这里,但是一个自我的左边加入替代:

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

看看现场演示关 Db<>的小提琴

2021-11-23 14:53:26

其他语言

此页面有其他语言版本

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