【问题标题】:insert into select where destination table has extra auto-increment column [duplicate]插入到目标表具有额外自动增量列的选择中[重复]
【发布时间】:2021-02-27 21:06:36
【问题描述】:

这是一个愚蠢的小问题。我有一个包含数百列的大表,所以我不想单独写出每个列名。问题是,table1 是源表,有 200 列,table2 是目标表,有 201 列,其中table2 的最后一列是一个额外的自动增量(主键)列。这个想法是我可以做到

insert into table2 select * from table1 where row = ##;

我希望所有数据都被复制并且自动增量列能够完成它的工作。但是我收到了这个讨厌的错误消息:

错误代码:1136。列计数与第 1 行的值计数不匹配

谁有一个简单的解决方案?

【问题讨论】:

  • 我不想单独写出每个列名。必须优先于 WANT。
  • 答案是只给一个NULL stackoverflow.com/questions/3493612/…
  • 答案是只给一个NULL MySQL不允许SELECT NULL, * FROM ..,只允许SELECT *, NULL FROM ..。如果“一个额外的自动增量(主键)列”是table2 结构中的最后一列,那么这是一个解决方案。
  • @Akina 好的,我没有注意到。幸运的是,我正在使用 *, NULL 处理此案例,并且它正在工作。

标签: mysql sql


【解决方案1】:

我的建议是使用 SQL 查询生成列名,然后进行剪切和粘贴。

但你也可以使用临时表的方法:

create table temp_table1 as
    select * from table1 where row = ##;

alter table temp_table1 drop column row;

然后您可以将temp_table1 与* 一起使用。当然,这是假设所有其他列都排成一行!我还建议列出 insert 的所有列。 . .你又回到了答案开头的建议。

【讨论】:

    【解决方案2】:

    最简单的解决方案是创建 table2 的备份,删除自动增量列,然后插入要插入的任何内容,因为列号匹配,然后您可以再次在末尾添加自动增量列。

    【讨论】:

      猜你喜欢
      • 2016-03-19
      • 2015-10-14
      • 2013-07-20
      • 1970-01-01
      • 2014-01-10
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      • 2016-12-10
      相关资源
      最近更新 更多