Bei einer Tabelle, die eine hierarchische Baumstruktur darstellt und drei Spalten hat
- ID (Primärschlüssel, nicht-autoincrementierend)
- ParentGroupID
- SomeValue
Ich kenne den untersten Knoten dieses Zweigs und möchte ihn in einen neuen Zweig mit der gleichen Anzahl von Elternteilen kopieren, die ebenfalls geklont werden müssen.
Ich versuche, eine einzige SQL INSERT INTO-Anweisung zu schreiben, die eine Kopie jeder Zeile, die von der gleichen Haupt ist, ist Teil eine GroupID in eine neue GroupID machen wird.
Beispiel Anfangstabelle:
ID | ParentGroupID | SomeValue
------------------------
1 | -1 | a
2 | 1 | b
3 | 2 | c
Ziel, nachdem ich eine einfache INSERT INTO-Anweisung ausgeführt habe:
ID | ParentGroupID | SomeValue
------------------------
1 | -1 | a
2 | 1 | b
3 | 2 | c
4 | -1 | a-cloned
5 | 4 | b-cloned
6 | 5 | c-cloned
Endgültige Baumstruktur
+--a (1)
| +--b (2)
| +--c (3)
|
+--a-cloned (4)
| +--b-cloned (5)
| +--c-cloned (6)
Die IDs sind nicht immer schön verteilt, wie diese Demodaten zeigen, so dass ich nicht immer davon ausgehen kann, dass die ID des Elternteils um 1 kleiner ist als die aktuelle ID für Zeilen, die Eltern haben.
Außerdem versuche ich, dies in T-SQL zu tun (für Microsoft SQL Server 2005 und höher).
Dies ist eine klassische Übung, die eigentlich eine reine SQL-Antwort haben sollte, aber ich bin zu sehr ans Programmieren gewöhnt, als dass ich in relationalem SQL denken könnte.
3 Stimmen
Welche Version von SQL Server verwenden Sie?
0 Stimmen
Mir ist unklar, wie die geklonten ParentGroupIDs bestimmt werden sollen. Wie konnte der Klon von B eine ParentGroupId von 4 erhalten, während der Klon von A eine ParentGroupId erhielt, die seiner Ausgangszeile entspricht?
0 Stimmen
Ich muss SQL Server 2005 unterstützen. (Ich habe den ursprünglichen Beitrag aktualisiert, um dies anzugeben)
0 Stimmen
Welche Art von Feld ist ID - eine Identitätsspalte oder eine manuell zugewiesene Ganzzahl?
0 Stimmen
Die Idee ist, die gleiche Baumstruktur für den neuen Zweig beizubehalten. Wenn ich einige Daten klonen möchte, die mit dem Baumknoten c (ID==3) verbunden sind, muss ich einen neuen Knoten erstellen, der dann auch die gleiche Anzahl von Eltern hat. Ich habe die endgültige Baumstruktur in den ursprünglichen Beitrag eingefügt, da ich in den Kommentaren schicke Formatierungen vornehmen kann, und ich denke, dass meine IDs korrekt aufgelistet sind... Ich habe nur versucht, die Dummy-Daten als einfaches Beispiel zu fälschen.
0 Stimmen
ID ist eine manuell zugewiesene Ganzzahl