SQL中的ALTER和UPDATE表基于两个条件

时间:2016-06-19 11:08:20

标签: mysql sql-server

编辑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;

2 个答案:

答案 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