Verwenden Sie SQL, um eine in einer Datenbank dargestellte Baumstruktur zu klonen

9

Gegeben eine Tabelle, die eine hierarchische Baumstruktur darstellt und drei Spalten hat

  1. ID (Primärschlüssel, nicht automatisch inkrementierend)
  2. ParentGroupID
  3. SomeValue

Ich kenne den untersten Knoten dieses Zweigs, und ich möchte das in einen neuen Zweig mit derselben Anzahl von Eltern kopieren, die auch geklont werden müssen.

Ich versuche, eine einzelne SQL INSERT INTO-Anweisung zu schreiben, die eine Kopie jeder Zeile, die derselben Hauptgruppe angehört, zu einer neuen GroupID macht.

Beispiel Anfangstabelle:

%Vor%

Ziel, nachdem ich eine einfache INSERT INTO-Anweisung ausgeführt habe:

%Vor%

Endgültige Baumstruktur

%Vor%

Die IDs sind nicht immer gut verteilt, da diese Demo-Daten angezeigt werden. Daher kann ich nicht immer davon ausgehen, dass die ID des Elternteils 1 kleiner ist als die aktuelle ID für Zeilen mit Eltern.

Auch versuche ich dies in T-SQL (für Microsoft SQL Server 2005 und höher) zu tun.

Das fühlt sich an wie eine klassische Übung, die eine reine SQL-Antwort haben sollte, aber ich bin zu sehr daran gewöhnt zu programmieren, dass mein Verstand nicht in relationalem SQL denkt.

    
AmoebaMan17 13.05.2010, 20:45
quelle

2 Antworten

3

Versuchen Sie dies, basierend auf einer Abfrage aus Quassnoi 's Artikel Adjazenzliste vs Verschachtelte Sätze: SQL Server :

%Vor%

Ergebnis bei Ausführung Ihrer Testdaten:

%Vor%     
Mark Byers 13.05.2010, 21:07
quelle
2

Assimieren dieser ID ist eine Identitätsspalte mit automatisch zugewiesenen Werten. Ich mache das aus dem Stegreif und entschuldige mich für Syntaxfehler. Ich hoffe, die Kommentare machen die Absicht klar.

%Vor%     
mdma 13.05.2010 21:15
quelle