2012-07-25 21 views
0

我有一個標準化的表(表一)和非規範化的表(表二)表,就像這樣:正火不同結構

enter image description here

我想插入新行到標準化表中的每個父母在非標準化表中。因此,如果表B中有兩個父母爲studentID的記錄,我想在表A中插入兩條記錄,每個父表中的父母名稱不同。

我一直在爲此奮鬥幾個小時,任何請幫助我們瞭解如何去做這件事。

+0

問題是什麼? – kakridge 2012-07-25 15:25:24

+0

將一個表中的數據插入另一個表中的sql查詢。 – user1319343 2012-07-25 15:26:45

+0

你能以文本格式添加表格佈局嗎?我看不到圖像。 – kakridge 2012-07-25 15:28:32

回答

0

假設parentID被自動增量列,你可以這樣做:

INSERT INTO NormalizedFamily(studentID, parentName) 
SELECT studentID, parentName1 
FROM FlatFamily 
UNION 
SELECT studentID, parentName2 
FROM FlatFamily 
WHERE parentName2 IS NOT NULL 
UNION 
SELECT studentID, parentName3 
FROM FlatFamily 
WHERE parentName3 IS NOT NULL 
UNION 
SELECT studentID, parentName4 
FROM FlatFamily 
WHERE parentName4 IS NOT NULL 

在任何情況下,我真的不知道爲什麼列parentId是您的標準化表格的關鍵。實際上,同一個家長不能有多個與他有關的學生?,不應該把這個密鑰作爲parentIDstudentID的組合。

+0

它看起來像複製粘貼錯誤,並且未能爲您的union子句排列列名。 – Milimetric 2012-07-25 15:33:25

+0

@Milimetric - 是的,複製粘貼從來不是我的朋友。謝謝! – Lamak 2012-07-25 15:34:55

0

這是unpivot的意思。儘管如此,對於初學者來說,這有點奇怪和難以理解。這裏要做到這一點應該很容易理解同樣的事情完全哈克的方式:

insert into NormalizedFamily (parentId, studentId, parentName) 
select p.parentName, 
     p.parentId, 
     f.studentId 
    from Parent p 
      inner join 
     (select studentId, parentName1 as parentName from FlatFamily 
     union all 
     select studentId, parentName2 as parentName from FlatFamily 
     union all 
     select studentId, parentName3 as parentName from FlatFamily 
     union all 
     select studentId, parentName4 as parentName from FlatFamily 
     union all 
     select studentId, parentName5 as parentName from FlatFamily 
     ) t    on t.parentName = p.parentName 

這裏是如何unpivot會工作。它基本上將列變成行。因此,請嘗試以下選擇語句:

SELECT studentId, parentColumnName, parentName 
    FROM (SELECT studentId, parentName1, parentName2, parentName3, parentName4, parentName5 
      FROM FlatFamily) f 
UNPIVOT (parentName FOR parentColumnName IN (parentName1, parentName2, parentName3, parentName4, parentName5)) AS t 
+0

事實上,在這種情況下,它將是'UNPIVOT' – Lamak 2012-07-25 15:33:43

+0

它說無效的對象名稱'父'。 – user1319343 2012-07-25 15:35:40

+0

@Lamak謝謝,更改並添加了示例。 – Milimetric 2012-07-25 15:46:24