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

标签 mysql sql-server

编辑 2:我更新了代码以按照建议放入逗号,并且更改了语法以将其作为 table.column。

我在 SQL 数据库中有两个表(如果需要的话,使用 Google 的 Cloud SQL)。第一个表 pre2016q1 包含列 tagadsh(以及其他几列)。我想添加列,然后用另一个表 num2016q1 中的值填充这些列,该表也有列 tagadsh 当值两个表中的值相等。

注意:这些是大表,每行超过 2MM。

Edit1:我在运行前询问,因为让数据库处于当前状态需要很长时间,我不想把整个事情搞砸。

问题一:下面的代码会执行上面描述的操作吗?

问题2:如果没有tagadsh等价物,记录会留空吗?

问题 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;

最佳答案

问题 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记录的数量确实有影响,但不会花很多时间

关于mysql - 基于两个条件的 SQL 中的 ALTER 和 UPDATE 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37906564/

相关文章:

mysql - 如何获取mysql语句中的行数并返回?

mysql - 通过在 SequelizeJS 中存储为二进制的 UUID 查找行

mysql - 如何修改查询或表来修复低效的查询?

sql - 返回子记录等于特定值的父记录,并且给定父记录的总子记录集等于特定值

mysql - 在一个脚本中执行所有存储过程

php - PHP代码导入的多条SQL

sql-server - BreezeJS 和存储过程

sql - 根据两个不同表中的时间戳和名称进行排序查询

SQL Server 在主表中加入两个没有重复的表

java - 父子关系表