Ich habe eine Tabelle mit drei Spalten mit doppelten Werten, aber keine Doppelzeilen. Jetzt möchte ich diese Tabelle in zwei Tabellen mit eindeutigen Werten und einer Linktabelle aufteilen. Ich denke, das Problem klarer wird, wenn ich Ihnen zeigen Beispieltabellen:Geteilte Tabelle in zwei Tabellen plus eine Verknüpfungstabelle
Original:
| ID | Column_1 | Column_2 | Column_3 |
|----|----------|----------|----------|
| 1 | A | 123 | A1 |
| 2 | A | 123 | A2 |
| 3 | B | 234 | A2 |
| 4 | C | 456 | A1 |
Table_1
| ID | Column_1 | Column_2 |
|----|----------|----------|
| 1 | A | 123 |
| 2 | B | 234 |
| 3 | C | 456 |
Table_2
| ID | Column_3 |
|----|----------|
| 1 | A1 |
| 2 | A2 |
Link-Table
| ID | fk1 | fk2 |
|----|-----|-----|
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 2 |
| 4 | 3 | 1 |
Table_1 ich so erstellt:
INSERT INTO Table_1(Column_1, Column_2)
SELECT DISTINCT Column_1, Column_2 FROM Original
WHERE Original.Column_1 NOT IN (SELECT Column_1 FROM Table_1)
table_2 ich auf die gleiche Weise erstellt.
Die Frage ist nun, wie man die Link-Tabelle erstellt? Die ursprüngliche Tabelle wird ständig erweitert, daher sollten nur neue Einträge hinzugefügt werden. Muss ich einen Cursor verwenden, oder gibt es einen besseren Weg?
LÖSUNG:
MERGE Link_Table AS LT
USING (SELECT DISTINCT T1.ID AS T1ID, T2.ID AS T2ID FROM Original AS O
INNER JOIN Table_1 AS T1 ON T1.Column_1 = O.Column_1
INNER JOIN Table_2 AS T2 ON T2.Column_3 = O.Column_3) AS U
ON LT.fk1 = U.T1ID
WHEN NOT MATCHED THEN
INSERT (fk1, fk2)
VALUES (U.T1ID, U.T2ID);
Danke für die Antwort. Ich habe es gelöst. Siehe meinen ursprünglichen Beitrag zur Lösung. – Suiram83