编辑2:我已根据建议更新了代码以放入逗号,我更改了语法,将其设置为table.column。
我在SQL数据库中有两个表(如果重要的话,使用Google的Cloud SQL)。第一个表 pre2016q1 包含标记和 adsh (以及其他几个)列。我想添加列,然后使用另一个表 num2016q1 中的值填充这些列,其中还包含标记和 adsh 列的值两个表都相同。
注意:这些是带有>的大表。每个2MM行。
编辑1:我在跑之前问过,因为花了很长时间让数据库处于当前状态,我不想搞砸整个事情。
问题1:以下代码是否会执行上述操作?
问题2:如果标签和 adsh 没有等效,那么记录会留空吗?
问题3:是否有一个名为 value 的列会引起任何问题,还是应该事先重命名?
问题4:在操作所需的时间内,表的大小是否重要? (我只是问,因为我需要做16次这个操作。)
ALTER TABLE pre2016q1
ADD
version VARCHAR(20),
ddate INTEGER,
qtrs INTEGER,
uom VARCHAR(20),
value NUMERIC(28,4),
footnote VARCHAR(512);
UPDATE
pre2016q1
SET
pre2016q1.ddate = num2016q1.ddate,
pre2016q1.qtrs = num2016q1.qtrs,
pre2016q1.uom = num2016q1.uom,
pre2016q1.value = num2016q1.value,
pre2016q1.footnote = num2016q1.footnote
WHERE
adsh.pre2016q1 = adsh.num2016q1 AND tag.pre2016q1 = tag.num2016q1;
答案 0 :(得分:2)
问题1:我会使用类似这样的内容
ALTER TABLE pre2016q1
ADD
version VARCHAR(20)
,ddate INTEGER
,qtrs INTEGER
,uom VARCHAR(20)
,value NUMERIC(28,4)
,footnote VARCHAR(512)
GO
UPDATE
pre
SET
pre.version = num.version
,pre.ddate = num.ddate
,pre.qtrs = num.qtrs
,pre.uom = num.uom
,pre.value = num.value
,pre.footnote = num.footnote
FROM pre2016q1 pre
INNER JOIN num2016q1 num
ON pre.adsh = num.adsh AND pre.tag = num.tag
问题2 记录将为空白。
问题3 如果您可以将其重命名为其他内容,那就太好了。
问题4 记录数量确实有影响但不会花费大量时间
答案 1 :(得分:0)
更新似乎是错误的表名和字段名称
之后UPDATE
pre2016q1
SET
pre2016q1.version =num2016q1.version
pre2016q1.ddate = num2016q1.ddate.num2016q1
pre2016q1.qtrs = num2016q1.qtrs
pre2016q1.uom = num2016q1.uom
pre2016q1.value = num2016q1.value
pre2016q1.footnote = num2016q1.footnote
WHERE
pre2016q1.adsh = num2016q1.adsh AND pre2016q1.tag = num2016q1.tag