Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 合并表并在必要时分配新的主键_Mysql_Merge - Fatal编程技术网

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

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 ---------

我正在合并两个可能具有相同主键(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


我意识到我可以通过类似于上所述的方式,在表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*的解决方案,但我现在认为这是不可能的,这个答案为我指明了正确的方向,我的工作代码就是基于这个。