问题,为什么这个剂量不起作用?
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
的所有数据,并按默认值或其他值填充其余列!
需要帮助! 谢谢你非常匹配!
答案 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;