我所擁有的大概是15個表格,每個表格包含大約10列和近100萬行數據。如何在SQL中附加表格「Sideways」
所有的15個表都有相同的主鍵,我可以用它們來連接它們。
例如..
表1 - 列ABCDE
表2 - 列ABFGH
表3 - 列ABIJK
表4 - 列ABLMN
等。其中,A & B是主鍵
我需要的是一個巨大的表看起來像這樣..
mainTable - 列ABCDEFG ...... MN
現在,我所做的是:
- 從表1開始,作爲我的「主」表
- 更改表以添加所有列。 F G H .. L M N)
- 使用UPDATE命令填寫 「主」 表
update mainTable set
F = a.F,
G = a.G,
H = a.H
from mainTable left join Table2 a on
mainTable.A = a.A and
mainTable.B = a.B
(rinse and repeat for each of the 15 tables)
這似乎是工作,只是它的效率極其低下。它需要年齡才能加入一張桌子..
是否有替代/更快的方法來執行此任務?
你爲什麼使用'LEFT JOIN'?如果它們對應的鍵不存在於Table2 *(和Table3等)*中,這將強制將值設爲NULL。那是對的嗎?另外,你是否確實知道'mainTable'中的每個鍵只在其他表中存在*(最多)*一次?下一步*(也部分回答最後一個問題)*,是否在所有表上都實施了索引和/或主鍵約束?確保快速加入?最後,是否有一個原因,你無法在一次更新中完成所有更新,主要是左側加入左側加入,左側加入等等等等。 – MatBailie 2012-04-17 10:33:47
嗨Dems,我確信相應的鍵存在於所有表中,並且mainTable中的鍵是唯一的。主鍵約束不會在此表中強制執行,我不太清楚快速連接的含義。我可以在一次大規模的更新中完成所有工作,但是當我只用兩張表進行嘗試時,已經花了15-25分鐘完成更新..這就是爲什麼我在這裏尋找更有效的替代方案 – d0h 2012-04-17 10:44:21
我的意思是如果沒有索引或主鍵約束,那麼在每個表上,聯接將非常緩慢。這類似於從書中撕下一百萬頁,並要求您將它們匹配到從另一本書中撕下的一百萬頁。如果他們被放入相同的訂單,這是一個微不足道的工作。如果他們是分散的(沒有索引或PK約束),那麼你會瘋了。 – MatBailie 2012-04-17 13:27:14