Dada una tabla que representa una estructura de árbol jerárquico y tiene tres columnasUso de SQL para clonar una estructura de árbol representado en una base de datos
- ID (clave principal, no-autoincremental)
- ParentGroupID
- SomeValue
Conozco el nodo más bajo de esa rama, y quiero copiarlo a una nueva rama con el mismo número de padres que también necesitan ser clonados.
Estoy tratando de escribir una sola instrucción SQL INSERT INTO que hará que una copia de cada fila que sea del mismo main tenga la primera parte GroupID en un nuevo GroupID.
Ejemplo tabla que comienza:
ID | ParentGroupID | SomeValue
------------------------
1 | -1 | a
2 | 1 | b
3 | 2 | c
meta después de ejecutar un INSERT INTO sencilla:
ID | ParentGroupID | SomeValue
------------------------
1 | -1 | a
2 | 1 | b
3 | 2 | c
4 | -1 | a-cloned
5 | 4 | b-cloned
6 | 5 | c-cloned
estructura de árbol final
+--a (1)
| +--b (2)
| +--c (3)
|
+--a-cloned (4)
| +--b-cloned (5)
| +--c-cloned (6)
Los identificadores no siempre están bien espaciadas ya que se muestran los datos de esta demostración, por lo que no siempre puedo suponer que la ID de los padres es 1 menos que e ID actual para las filas que tienen padres.
Además, estoy tratando de hacer esto en T-SQL (para Microsoft SQL Server 2005 y superior).
Esto se siente como un ejercicio clásico que debe tener una respuesta de SQL puro, pero estoy demasiado acostumbrado a programar que mi mente no piensa en SQL relacional.
¿Qué versión de SQL Server estás usando? –
No tengo claro cómo se determinarán los ParentGroupID clonados. ¿Cómo consiguió el clon de B un ParentGroupId de 4 mientras que el clon de A obtuvo un ParentGroupId igual a su fila fuente? – Thomas
Necesito admitir SQL Server 2005. (Actualicé la publicación original para indicar esto) – AmoebaMan17