【问题标题】:Merge tables and assign new primary keys where necessary合并表并在必要时分配新的主键
【发布时间】:2016-12-30 16:03:47
【问题描述】:

我正在合并两个可能具有相同主键 (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 时,如何让脚本分配新 ID?

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

【问题讨论】:

  • 您应该对 id 使用自动增量,并且只添加目标表中不存在的名称..

标签: mysql merge


【解决方案1】:

您需要添加另一列来指定结果表的类型。 例如在table_a(结果表)中你应该添加一个名为type的列INT类型(或BIT类型这里),那么你需要指定例如0表示@的数据987654326@ 和1 表示table_b 的数据。 因此,在结果表 (table_a) 中,您有以下字段:

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

在插入记录之前,您首先按类型 0 更新表 'table_a'

UPDATE table_b SET type = 0

然后按照INSERT 合并table_b 和table_a:

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

【讨论】:

  • 虽然我在寻求使用 SELECT * 的解决方案,但我现在认为这是不可能的,但这个答案为我指明了正确的方向,我的工作代码以此为基础。
猜你喜欢
  • 2011-05-30
  • 1970-01-01
  • 1970-01-01
  • 2016-04-25
  • 2017-08-03
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2014-01-25
相关资源
最近更新 更多