提问者:小点点

从一个表插入到另一个具有更多列的表


为了节省在具有许多索引的5M大记录表上的时间,自

更改表A添加列X

如果我第一次复制的是索引和数据(没有数据),就会花费永远的时间;

Create TableB Like TableA

然后我添加了一个字段,使用

更改表B添加列X

现在我试着把数据复制过来

Insert TableB Select * from TableA

但我要

> 1136 - Column count doesn't match value count at row 1

我要插入的表有更多的列,所以不确定这是一个问题。 是否需要添加一些命令,或者是否需要指定插入和选择中的所有列?


共2个答案

匿名用户

这种情况下的最佳实践实际上是在insert语句中显式列出所有列。 即使列数相同,也是如此。

但是,如果表A中的列的顺序和类型与表B中的列相匹配,减去在末尾添加的列X,则可以使用以下方法:

INSERT INTO TableB
SELECT *, NULL         -- NULL will be inserted into column X
FROM TableA;

同样,上面的说明只适用于给定的警告。 如果可能的话,你应该列出列。

匿名用户

避免隐式列列表总是一个好主意。 相反,应显式列出列。 这样,如果表发生变化,您的查询仍然有机会工作。

显式列出列时,您可以这样编写查询:

Insert TableB (col1, col2, col3)
Select colA, colB, colC from TableA

如果TableB有额外的列,只需不要在第一行的列列表中列出它们即可。 使用此语句插入的行的值要么为NULL,要么使用为列定义的默认值(如果定义了一个)。