我在表A中有一组行(带有AI PK),我想根据某些标准克隆这些行,即:
插入A (field1,field2,field3)从A中选择field1、field2、field3 (标准)
但是,这些行与表B有一个1-1的关系,它在B中有一个AI PK,在A中有一个FK。我还想克隆表B中的相关行,并让A中的克隆行指向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发布于 2015-11-11 01:21:49
下面是一种使用子查询复制表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)但是,创建包含源id的额外列可能更容易(也更快)
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)发布于 2015-11-11 00:10:40
然后SET FOREIGN_KEY_CHECKS=0做你需要做的插入.如果需要外键检查SET FOREIGN_KEY_CHECKS=1之后还有更多工作要做,则选中
https://stackoverflow.com/questions/33642015
复制相似问题