mysql通过关联字段同步两张表的字段内容

一、问题说明

今天弄数据库的时候要实现通过关联字段同步两张表的字段内容

关联字段为两张表的各自的id,同步B表的b、c、d字段内容到A表的b、c、d字段内容。
PS:把一张表中的某个字段内容同步到另一张表的字段,前提条件是两张表要有关联字段。

二、解决方法

1、建表

create table A(
id int primary key, 
b varchar(16),
c varchar(16),
d varchar(16)
)engine=InnoDB;

create table B(
id int primary key, 
b varchar(16),
c varchar(16),
d varchar(16)
)engine=InnoDB;

2、初始化数据

insert into A(id,b,c,d) values(1,'A-b-1','A-c-1','A-d-1');
insert into A(id,b,c,d) values(2,'A-b-2','A-c-2','A-d-2');

insert into B(id,b,c,d) values(1,'B-b-1','B-c-1','B-d-1');
insert into B(id,b,c,d) values(2,'B-b-2','B-c-2','B-d-2');

3、更新B表数据到A表

查询A、B表

select id,b,c,d from A;
select id,b,c,d from B;

方法1(最简单):INNER内连接实现

update A INNER JOIN B ON A.id = B.id
set
A.b = B.b,
A.c = B.c,
A.d = B.d;

方法2:子查询实现
 

update A a
set
a.b = (select b.b from B b where a.id= b.id),
a.c = (select b.c from B b where a.id= b.id),
a.d = (select b.d from B b where a.id= b.id)
where exists (select 1 from B c where a.id= c.id);

exists 用于检查子查询是否至少会返回一行数据(即exists 指定一个子查询,检测行的存在);
where exists 该子查询实际上并不返回任何数据,而是返回值True或False


最后查询A、B表

select id,b,c,d from A;
select id,b,c,d from B;

 

你可能感兴趣的:(Mysql)