问题,为什么这个剂量不起作用?
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
也有另一列,它们有一些默认值。
有什么办法吗?将 two
中的所有数据插入到 one
中,并用一些默认值或其他值填充剩余的列!
需要帮助! 谢谢你很配!
最佳答案
当你运行时:
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;
关于mysql - 从另一个具有不同列数的表中插入表(MySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38647999/