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