将具有不同列数的表格中的数据插入到另一个表格中 (MySQL)

4
问题:为什么这个不起作用?
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,知道表one中列a的默认值为1。那么执行这个查询有什么问题吗?
总体来说 - 如果不手动指定列和它们的数量,我该怎么做呢?如果这种方式不可行,有没有其他方法?
我知道这一点:表two始终具有与表one相同的所有列。但是表one还有其他列,它们具有一些默认值。
有没有办法将table two中的所有数据插入到table one中,并使用某些默认值或其他值填充其余的列!
需要帮助! 非常感谢!

插入到one表中,选择two表中的b列。 - SIDU
1个回答

4
当你运行以下命令时:
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;

谢谢。我明白了。但是这意味着,我必须始终知道相同的列名,因为它们必须自动插入,因为两个表都有它们。为什么我必须手动设置这些名称呢? 好吧... 这对于数据库的关系理论来说非常奇怪。最终 - 所以,这个任务不能用SQL解决吗? 也许有一些简单的方法,最小化编程和最大化SQL?因为列的名称 - 我不知道它们。我知道表“one”有与表“two”相同的所有列,还有一些带有默认值的其他列。谢谢! - dmitryck
PS. 我已经用一些额外的编程完成了这个任务,谢谢回答 insert into one(b) select b from two; - dmitryck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接