在开发过程中,有时会遇到需要将某张表的字段值根据条件动态地更新到另一张表字段的问题,即通过一张表的字段修改另一张关联表中的内容。比如,存在两张表A(表名:test_a)、B(表名:test_b),他们的表结构如下:

表A(test_a):

id

user_id

dept_id

update_time

1

34242

313

2

35322

320

3

35639

321

表B(test_b):

id

user_id

patient_id

dept_id

create_time

1

34242

342

0

2018-05-23 09:33:45

2

35322

365

0

2018-05-24 00:13:05

3

35639

398

0

2018-05-24 00:43:18

现在我们需要将表A的 dept_id 字段值根据 user_id 字段同步到表B的 dept_id 字段中,即用表A中的 dept_id 字段数据去更新表B中的 dept_id 字段,条件是表A的 user_id 字段值与表B的 user_id 字段值相等时进行更新。

在MySQL中我们有几种方法可以做到:

方法一:

UPDATE test_a a, test_b b

SET b.dept_id = a.dept_id

WHERE

b.user_id = a.user_id;

方法二:(通过 INNER JOIN)

UPDATE test_a a

INNER JOIN test_b b ON a.user_id = b.user_id

SET b.dept_id = a.dept_id;

方法三:(通过 LEFT JOIN)

UPDATE test_a a

LEFT JOIN test_b b ON a.user_id = b.user_id

SET b.dept_id = a.dept_id;

方法四:(通过子查询)

UPDATE test_b b

SET dept_id = ( SELECT dept_id FROM test_a WHERE user_id = b.user_id );

上面的代码片断都是在两张表之间做关联,但只更新其中一张表的数据。其实,除了更新其中一张表的数据外,方法一、方法二和方法三是可以同时更新两张表的数据,如:

-- 以下代码无实际意义,目的是方便记录

-- 方法一

UPDATE test_a a, test_b b

SET b.dept_id = a.dept_id, a.update_time = b.create_time

WHERE

b.user_id = a.user_id;

-- 方法二:(通过 INNER JOIN)

UPDATE test_a a

INNER JOIN test_b b ON a.user_id = b.user_id

SET b.dept_id = a.dept_id, a.update_time = b.create_time;

-- 方法三:(通过 LEFT JOIN)

UPDATE test_a a

LEFT JOIN test_b b

ON a.user_id = b.user_id

SET b.dept_id = a.dept_id, a.update_time = b.create_time;

两表关联更新 mysql_MySQL多表更新(关联表更新)相关推荐

  1. mysql之关联更新(update join,用b表更新a表记录)

    前言 发现之前并没有整理过mysql表关联更新,这里补上.有时候我们需要用b表去更新a表的记录,如果只有一个字段那通常我们可能就update set a.xxx=(select b.xxx from ...

  2. mysql支持UUID做外键_多表外键下将普通的id主键更新为uuid主键

    多表外键下将普通的id主键更新为uuid主键 2019-05-20 02:45:37 来源: 晴天小雨 0 摘要:在多表外键影响和保证数据不删除的前提下,借助Flask-sqlalchemy插件及SQ ...

  3. efcore根据多个条件更新_EFCore.Sharding(EFCore开源分表框架)

    简介 本框架旨在为EF Core提供Sharding(即读写分离分库分表)支持,不仅提供了一套强大的普通数据操作接口,并且降低了分表难度,支持按时间自动分表扩容,提供的操作接口简洁统一. 源码地址:E ...

  4. 更新SQL Server实例所有数据库表统计信息

    引出问题 自从上次菜鸟为老鸟解决了<RDS SQL SERVER 解决中文乱码问题>问题,老鸟意犹未尽,决定再想个招来刁难刁难菜鸟:"我最近做T-SQL性能调优的时候,经常发现执 ...

  5. oracle 子表数据变化时主表也会更新_亿信ABI版本重大更新,新增60余个实用新功能,还有一项黑科技...

    今年,亿信ABI横空出世,产品一经推出,前来体验.咨询.购买的客户络绎不绝.老板点赞,客户开心,年终奖感觉又要翻几番. 但是紧接而来的是,广大用户对于产品优化的需求就如同潮水一般涌来-- 为此,我们的 ...

  6. mybatis在指定库建表_使用MyBatis Plus自动添加数据库表中的创建时间、创建者、更新时间、更新者...

    使用到Sringboot.Mybatis Plus.Shiro.Mysql 1.创建一张部门表,表结构 CREATE TABLE `sys_dept` ( `dept_id` bigint(20) N ...

  7. QQ飞车手游S25赛季什么时候更新?S25赛季段位继承表图文一览

    QQ飞车手游S25赛季什么时候更新?QQ飞车手游官方近期宣布了即将在10月22日进行新赛季S25赛季的更新.下面就让游综宅小编为大家带来,QQ飞车手游S25赛季段位继承表图文一览. QQ飞车手游S25 ...

  8. 两表连接查询 mysql_MySQL 中两表连接查询总结

    在之前的学习中,筛选出来的列都是一张表中的,本篇开始是对连表查询的学习内容.先从以下场景开始: 生成一张报价单,报价单包含商品名称,栏目名称,商品库存,商品价格,栏目名称和商品信息放在两张表中. 传统 ...

  9. 将一张表的主键作为外键关联到另一张表中

    将一张表的主键作为外键关联到另一张表中 1.外键的介绍 2.使用Navicat创建外键 3.外键的维护关系设定及其选择 1.外键的介绍 设置外键的作用很明显,就是讲两个表的数据产生关联,就比如个人信息 ...

最新文章

  1. 铜陵新松工业机器人项目_投资10亿元,茶山德威工业机器人和精密模具项目动工...
  2. XYPieChart
  3. WCF IE 能够正常访问,chrome 和firefox不能正常访问
  4. Java栈内存溢出代码实例
  5. mysql在线开启并行复制_mysql 5.7开启并行复制
  6. 人工智能只能用python吗_为什么人工智能用Python?
  7. 我如何使用Python查找有趣的人来关注Medium
  8. 理想制动力分配曲线matlab源代码_电动汽车机电复合制动力分配策略
  9. 【numpy】np.random.normal()函数
  10. python中headers的作用_爬虫入门到精通-headers的详细讲解(模拟登录知乎)
  11. 查看nginx进程_nginx的进程模型与配置
  12. spring配置 quartz-config.xml
  13. 读书笔记 计算机系统--系统架构与操作系统的高度集成 第二章处理器体系结构...
  14. 砸黑板! 正则表达式!!!re 模块
  15. android slidemenu 折叠效果,左侧菜单栏折叠展开效果-超级简单
  16. 《大众创业做电商——淘宝与微店 开店 运营 推广 一册通》一一2.5 O2O电子商务模式...
  17. 陶哲轩实分析(上)8.2及习题-Analysis I 8.2
  18. Excel堆积柱形图制作过程
  19. c语言约分最简分式原理,算法基础:约分最简分式
  20. seo关键词挖掘与筛选技巧

热门文章

  1. 6种不同画法画平行线_今年超火的Prada Hobo,原来有6种不同
  2. mysql创建gbk库_MYSQL创建utf-8和GBK格式数据库
  3. linux 目录 读写,Linux C 文件与目录3 文件读写(示例代码)
  4. java响应鼠标滚轮事件_javascript滚动条响应鼠标滑轮的实现上下滚动事件
  5. python必须连网开发吗_Python以太坊开发节点和网络选择
  6. 现代化蔬菜大棚采用什么和计算机自动控制,温室大棚自动控制系统存在的意义以及未来的发展...
  7. 安卓团课快进_青年大学习网上主题团课第十季第七期答案
  8. Apache httpd 安装
  9. 基于JAVA+Servlet+JSP+MYSQL的实验室机房预约管理系统
  10. linux进程理解,进程资源 - 进程基础 - [ 理解Linux进程 ] - 手册网