给定一个表示层次树结构的表,它有三列:
- ID(主键,非自增)
- ParentGroupID
- SomeValue
我知道该分支的最底层节点,并且我想将其复制到具有相同父级数量的新分支中,这些父级也需要被克隆。
我正在尝试编写一个单个的SQL INSERT INTO语句,它将复制与第一组ID相同的每一行到一个新的GroupID中。
例如,开始时的表格如下:
ID | ParentGroupID | SomeValue
------------------------
1 | -1 | a
2 | 1 | b
3 | 2 | c
运行简单的INSERT INTO语句后我的目标是什么:
ID | ParentGroupID | SomeValue
------------------------
1 | -1 | a
2 | 1 | b
3 | 2 | c
4 | -1 | a-cloned
5 | 4 | b-cloned
6 | 5 | c-cloned
最终的树状结构
+--a (1)
| +--b (2)
| +--c (3)
|
+--a-cloned (4)
| +--b-cloned (5)
| +--c-cloned (6)
这个演示数据并不总是有良好的间隔,所以对于具有父级的行,我不能总是假设父级ID比当前ID小1。
此外,我正在尝试在T-SQL(适用于Microsoft SQL Server 2005及更高版本)中完成此操作。
这感觉像一个经典的练习题,应该有一个纯SQL的答案,但我太习惯编程了,我的思维无法转换到关系型SQL。