首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:克隆表A中的多行和表B中的相关行

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

Stack Overflow用户
提问于 2015-11-11 00:06:01
回答 2查看 536关注 0票数 1

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

插入A (field1,field2,field3)从A中选择field1、field2、field3 (标准)

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

我正在寻找最简单的方法来完成这个任务--最好是在SQL中。

下面是我要做的事情的一个例子:

克隆前:

代码语言:javascript
复制
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

行克隆后:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-11 01:21:49

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

代码语言:javascript
复制
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的额外列可能更容易(也更快)

代码语言:javascript
复制
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)
票数 2
EN

Stack Overflow用户

发布于 2015-11-11 00:10:40

然后SET FOREIGN_KEY_CHECKS=0做你需要做的插入.如果需要外键检查SET FOREIGN_KEY_CHECKS=1之后还有更多工作要做,则选中

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33642015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档