我所拥有的大概是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