我在表A(带有AI PK)中有一组行,我想根据某些标准克隆,即:
INSERT INTO A(field1,field2,field3)SELECT field1,field2,field3 FROM A WHERE(标准)
但是,这些行与表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
答案 0 :(得分:1)
SET FOREIGN_KEY_CHECKS=0
然后使用INSERT INTO ... SELECT执行任何操作
如果之后还有更多要做的事情需要外键检查
SET FOREIGN_KEY_CHECKS=1
答案 1 :(得分: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)
但是创建包含源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)