MySQL:克隆表A中的多行和表B中的相关行

MySQL:克隆表A中的多行和表B中的相关行,mysql,sql,Mysql,Sql,我在表a中有一组行(带有AI PK),我想根据某些条件克隆这些行,即: 插入到(字段1、字段2、字段3)中,从其中选择字段1、字段2、字段3(标准) 但是,这些行与表B有1-1关系,表B在B中有AI PK,在a中有FK。我还想克隆表B中的相关行,并使克隆行指向B中的克隆行,而不是原始行 我正在寻找实现这一点的最简单方法——最好只使用SQL 下面是我尝试做的一个例子: 克隆前: Table A ID B_FK Other Data Meets Clone Criteria 1

我在表a中有一组行(带有AI PK),我想根据某些条件克隆这些行,即:

插入到(字段1、字段2、字段3)中,从其中选择字段1、字段2、字段3(标准)

但是,这些行与表B有1-1关系,表B在B中有AI PK,在a中有FK。我还想克隆表B中的相关行,并使克隆行指向B中的克隆行,而不是原始行

我正在寻找实现这一点的最简单方法——最好只使用SQL

下面是我尝试做的一个例子:

克隆前:

Table A 
ID   B_FK   Other Data  Meets Clone Criteria    
1    101    Data 1      true
2    102    Data 2      false 
3    103    Data 3      true
4    104    Data 4      true

Table B
ID   Other Data
101  Data A
102  Data B
103  Data C
104  Data D
行克隆后:

Table A 
ID   B_FK   Other Data
1    101    Data 1
2    102    Data 2 
3    103    Data 3
4    104    Data 4
5    105    Data 1
6    106    Data 3
7    107    Data 4

Table B
ID   Other Data
101  Data A
102  Data B
103  Data C
104  Data D
105  Data A
106  Data C
107  Data D

设置外键检查=0
然后做任何你需要插入到。。。挑选 如果以后还有其他事情需要做,则需要检查外键
SET FOREIGN\u KEY\u CHECKS=1

下面是一种使用子查询复制表b中的行并使它们指向表a中的新fk的方法

insert into b (a_fk, some_field)
select 
    (select max(a2.id) from a a2
    where a2.id <> a1.id
    and a2.field1 = a1.field1
    and a2.field2 = a1.field2
    and a2.field3 = a1.field3), 
    b.some_field
from b
join a a1 on a1.id = b.a_fk
where (criteria)

问题是我需要表A中的克隆行为表B中新克隆的行提供正确的外键。您能用一个例子来说明这一点吗?特别是,为什么仅仅将A中的行插入B中是行不通的。是的,我已经编辑了上面的问题。我没有尝试将行从A克隆到B。我尝试将A中的行克隆到A,同时也将B中的相关子行克隆到B。这个问题解决了SQL Server中的相同问题——但我被困在MySQL中:这里有一个与存储过程相关的问题,可以处理一行,但我想处理整组行:其中有这么多列表中显示,第一种方法不太吸引人(我还希望有一个更可重用的解决方案)。按照您的建议添加一个列可能确实是一个很好的解决方案。我想这也可以用MySQL游标来完成?我现在正试图探索这种方法。我使用了额外的列方法
insert into a (field1, field2, field3, source_id) 
select field1, field2, field3, id 
from a where (criteria)

insert into b (a_fk, some_field)
select a.id, b.some_field 
from b
join a on a.source_id = b.a_fk
where (criteria)