从另一个具有不同列数的表插入表(MySql)

时间:2016-07-28 22:52:14

标签: mysql sql

问题,为什么这个剂量不起作用?

create table one (a int(1) default 1, b int(2));

create table two (b int(1));

insert into one select * from two;

错误:

Column count doesn't match value count at row 1

知道它,可以数,但为什么,哲学? 数据库知道,表two中插入列的名称是b,知道表a中的列one的默认值等于1。 。 那么,执行此查询有什么问题?

总体而言 - 如果这种方式不可能,如果没有列的信息及其计数,我怎么能以不同的方式做到这一点,而不是手动呢?

我知道这个: two始终具有表one所拥有的所有相同列。但是表one也有另一个列,它们有一些默认值。

有没有办法做到这一点?在two中插入one的所有数据,并按默认值或其他值填充其余列!

需要帮助! 谢谢你非常匹配!

1 个答案:

答案 0 :(得分:3)

当你跑步时:

insert into one
    select * from two;

SQL引擎会自动放入隐含的列。

  • 对于insert,这是声明顺序中的列列表。
  • 对于*,这是声明顺序中的列列表。

列名没有“匹配”,只有每个表中的列列表。

所以,查询确实是:

insert into one(a, b)
    select b from two;

这对我来说似乎是个错误。

故事的道德?写下你想要的代码。始终包含列列表,尤其是insert语句。所以写:

insert into one(b)
    select b from two;