2016-07-21 111 views
1

我有一個三列有雙值的表格,但沒有雙行。現在我想用兩個表格將這個表格分成獨特的值和一個鏈接表。我認爲這個問題更清楚地得到當我告訴你例子表:在兩個表格中加上一個鏈接表格的分割表格

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我這樣創建:

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我以同樣的方式產生。

現在的問題是,如何創建鏈接表? 原始表不斷增加,所以只應添加新條目。 我必須使用光標,還是有更好的方法?

SOLUTION:

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); 

回答

0

,您可以加入所有3個表,以獲得鏈接表正確的數據:

--INSERT INTO [Link-Table] 
SELECT t1.ID, 
     t2.ID 
FROM Original o 
INNER JOIN Table_1 t1 
    ON t1.Column_1 = o.Column_1 
INNER JOIN Table_2 t2 
    ON t2.Column_3 = o.Column_3 

如果您的原始表將增長,那麼你需要使用合併更新/插入新數據。

+0

感謝您的回覆。我解決了它。看到我原來的帖子解決方案。 – Suiram83

0

你必須內在地加入你的Original,Table_1和Table_2才能得到想要的結果。

像這樣嘗試,它類似於gofr1的帖子。

DECLARE @orginal TABLE (
    ID INT 
    ,Column_1 VARCHAR(10) 
    ,Column_2 INT 
    ,Column_3 VARCHAR(10) 
    ) 
DECLARE @Table_1 TABLE (
    ID INT 
    ,Column_1 VARCHAR(10) 
    ,Column_2 INT 
    ) 
DECLARE @Table_2 TABLE (
    ID INT 
    ,Column_3 VARCHAR(10) 
    ) 

Insert into @orginal values 
(1,'A',123,'A1') 
,(2,'A',123,'A2') 
,(3,'B',234,'A2') 
,(4,'C',456,'A1') 

Insert into @Table_1 values 
(1,'A',123) 
,(2,'B',234) 
,(3,'C',456) 

Insert into @Table_2 values 
(1,'A1') 
,(2,'A2') 

SELECT O.ID 
    ,T1.ID 
    ,T2.ID 
FROM @orginal O 
INNER JOIN @Table_1 T1 ON T1.Column_1 = O.Column_1 
INNER JOIN @Table_2 T2 ON T2.Column_3 = O.Column_3 
相關問題