今天弄数据库的时候要实现通过关联字段同步两张表的字段内容
关联字段为两张表的各自的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;