编辑 2:我更新了代码以按照建议放入逗号,并且更改了语法以将其作为 table.column。
我在 SQL 数据库中有两个表(如果需要的话,使用 Google 的 Cloud SQL)。第一个表 pre2016q1 包含列 tag 和 adsh(以及其他几列)。我想添加列,然后用另一个表 num2016q1 中的值填充这些列,该表也有列 tag 和 adsh 当值两个表中的值相等。
注意:这些是大表,每行超过 2MM。
Edit1:我在运行前询问,因为让数据库处于当前状态需要很长时间,我不想把整个事情搞砸。
问题一:下面的代码会执行上面描述的操作吗?
问题2:如果没有tag和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;
最佳答案
问题 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/