Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#1

Master-Detail Tabellensätze klonen [Denksportaufgabe]

  Alt 5. Okt 2005, 16:17
Datenbank: MSSQL • Version: 2000 • Zugriff über: egal
Hallo SQL-Spezis,

Ich habe eine Aufgabe (nee, keine Hausaufgabe, schaut mal aufs Alter ). Es geht ums Duplizieren von Einträgen einer Master-Detail Beziehung. Die Lösung sollte ein SQL-Skript sein (Microsoft SQL-Server Dialekt). Cursors sind verboten (weil sie lahm sind).

Gegeben sei eine Mastertabelle (die ID-Spalte ist ein Identity-Wert (also AutoInc)):
Code:
ID Name Eigenschaft
1  Fritz  1
2  Franz  2
3  Hubert 2
Die Detailtabelle sei (ID-Spalte wieder ein Identity-Wert, Verknüpfung über Detail.MasterID --> Master.ID):
Code:
ID MasterID Details
1  1        Fritz-1
2  1        Fritz-2
3  2        Franz-1
4  2        Franz-2
5  2        Franz-3
6  2        Franz-4
7  3        Hubert-1
8  3        Hubert-2
9  3        Hubert-3
Einfache Aufgabe: Klone alle Einträge (sowie die Detaileinträge) mit Eigenschaft = X. Bei X = 2 soll z.B. Franz und Hubert in der Mastertabelle und die insgesamt 7 Detaileinträge dupliziert werden.
Das Resultat wäre dann:
MASTER
Code:
ID Name Eigenschaft
1 Fritz   1
2 Franz   2
3 Hubert  2
4 Franz   2
5 Hubert  2
DETAIL:
Code:
ID MasterID Details
 1  1       Fritz-1
 2  1       Fritz-2
 3  2       Franz-1
 4  2       Franz-2
 5  2       Franz-3
 6  2       Franz-4
 7  3       Hubert-1
 8  3       Hubert-2
 9  3       Hubert-3
10  4       Franz-1
11  4       Franz-2
12  4       Franz-3
13  4       Franz-4
14  5       Hubert-1
15  6       Hubert-2
16  6       Hubert-3
Die IDs der geklonten Einträge ist egal, Hauptsache die Referenzen sind korrekt.

Ich habe eine Lösung, die allerdings in der Master-Tabelle eine Hilfsspalte verwendet ('Clone'). Geht es auch ohne? Gibt es Optimierungsmöglichkeiten?
Angehängte Dateien
Dateityp: txt sample-solution_208.txt (1,5 KB, 15x aufgerufen)
Dateityp: txt createsampletables_663.txt (1,1 KB, 9x aufgerufen)
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat