Mysql 合并表并在必要时分配新的主键
我正在合并两个可能具有相同主键(id)的表,这将产生重复条目错误。 我可以为插入的数据甚至现有数据生成新的主键,因此如果示例数据库是:Mysql 合并表并在必要时分配新的主键,mysql,merge,Mysql,Merge,我正在合并两个可能具有相同主键(id)的表,这将产生重复条目错误。 我可以为插入的数据甚至现有数据生成新的主键,因此如果示例数据库是: table_a Id | Name ---------- 1 | Jack ---------- 2 | Jill ---------- 3 | John ---------- table_b Id | Name ---------- 1 | Jim ---------- 2 | Jenny ---------- 3 | Joy ---------
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
我意识到我可以通过类似于上所述的方式,在表a(名称)中插入,从表b中选择名称,但是我有将近100个不同结构的表需要合并,我希望能够使用SELECT*
并分配新ID。您需要添加另一列来指定结果表的类型。
例如,在表a
(结果表)中,您应该添加一个名为type
的INT
类型列(或此处的BIT
类型),然后您需要指定例如0
表示表a
的数据,1
表示表b
的数据。
因此,在结果表(表a
)中有以下字段:
- Id(INT-P.K.自动增量)
- 类型(INT)
- TableRelatedId(已定义的INT)
- 名称(已定义的VARCHAR)
在插入记录之前,首先按类型0更新表“table_a”
updatetable\u b SET type=0
然后通过以下INSERT
将table_b
与table_a
合并:
INSERT table_a([Type],TableRelatedId,Name)从table_b中选择1,Id,Name
您应该对Id使用自动递增,并且只添加目标表中不存在的名称。虽然我是在寻找使用SELECT*的解决方案,但我现在认为这是不可能的,这个答案为我指明了正确的方向,我的工作代码就是基于这个。