【问题标题】:How to merge two identical tables that have a primary key?如何合并两个具有主键的相同表?
【发布时间】:2016-08-11 15:41:44
【问题描述】:

这似乎是一项简单的任务,但我正在努力寻找一种方法来做到这一点。我有两个结构相同的表(A 和 B)。两者都有一个自增主键。我希望表 B 中的数据进入表 A。我试过了:

insert into A select * from B

但是我得到一个主键已经存在的错误。我希望表 B 中的新行在将它们插入表 A 时获得新的主键 - 所以基本上丢弃 B 中的主键但插入所有其他列。似乎它应该是一个简单的查询,但我无法弄清楚。谢谢。

【问题讨论】:

  • insert into A (col1, col2, col3) values (select col1, col2, col3 from B)。忽略插入和选择中的主键/自动递增列。
  • 我之前试过了,我得到了这个错误 /* SQL 错误 (1064): 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“select col1,col2,col3 from B)”附近使用正确的语法 */
  • 那是因为INSERT...SELECT不使用值列表,而INSERT... VALUES一般不使用SELECTs。

标签: mysql merge


【解决方案1】:

您还选择(并插入)auto_increment id,如果这样的 id 已经存在,则会失败。要让 mysql 自动分配 id,只需选择并插入除 id 之外的所有值:

INSERT INTO A (foo, bar, baz)
SELECT foo, bar, baz FROM B

【讨论】:

  • 有效,是语法问题,insert into A (col1,col2,col3) values (select col1,col2,col3 from B) 抛出错误。删除了括号和值适用于insert into A (col1,col2,col3) select col1,col2,col3 from B。谢谢。
【解决方案2】:

您必须指定要从表 B 插入到表 A 的列,因为您想创建一个新 id,您可以使用如下查询,假设 column1 是我们不想插入的键。

insert into A (column2, column3) select column2, column3 from B 

您也可以查看这个link,它有一些很好的查询示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 2017-09-28
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多