合并表并在必要时分配新的主键

时间:2016-12-30 16:03:47

标签: mysql merge

我正在合并两个可能具有相同主键(id)的表,这将产生重复的条目错误。 我可以为插入的数据甚至是现有数据生成新的主键,所以如果示例数据库是:

table_a
Id | Name
----------
1  | Jack
----------
2  | Jill
----------
3  | John
----------

table_b
Id | Name
----------
1  | Jim
----------
2  | Jenny
----------
3  | Joy
----------

导入脚本为INSERT INTO table_a SELECT * FROM table_b;

如果脚本被检测为重复时,如何让脚本分配新ID?

我意识到我可以用与Merge and update primary key中描述的方式类似的方式来INSERT INTO table_a (name) SELECT name FROM table_b,但我有近100个不同结构的表,我需要合并并希望能够使用SELECT *并指定新的ID。

1 个答案:

答案 0 :(得分:0)

您需要添加另一列,指定结果表的类型。 例如,在table_a(结果表)中,您应该添加一个名为type INT类型的列(此处为BIT类型),然后您需要指定示例0表示table_a1的数据表示table_b的数据。 因此,在结果表(table_a)中,您有以下字段:

  • Id(INT - P.K. AutoIncrement)
  • 类型(INT)
  • TableRelatedId(您已定义的INT)
  • 名称(已定义的VARCHAR)

在插入记录之前,首先按类型0

更新表'table_a'

UPDATE table_b SET type = 0

然后按照table_b

table_aINSERT合并

INSERT table_a([Type], TableRelatedId, Name) SELECT 1, Id, Name FROM table_b