千家信息网

mysql跨表更新怎么实现

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇内容介绍了"mysql跨表更新怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!背景项目新导
千家信息网最后更新 2026年10月31日mysql跨表更新怎么实现

本篇内容介绍了"mysql跨表更新怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

背景

项目新导入了一批人员数据,这些人的有的部门名称发生了变化,有的联系方式发生了变化,暂且称该表为

t_dept_members, 系统中有另外一张表 t_user_info 记录了人员信息。要求将 t_dept_members 中有变化的信息更新到 t_user 表中,这个需求就是「跨表更新」啦

憨B SQL 直接被秒杀

不带脑子出门的就写出了下面的 SQL

看到身后 DBA 小段总在修仙,想着让他帮润色一下?,于是发给了他,然后甩手回来就是这个样子:

看到这个 SQL 语句我都惊呆了,还能这样写,在无情的嘲笑下,一声 KO 我直接倒下。死也得死的明白,咱得查查这是咋回事啊

Mysql Update Join

我们经常使用 join 查询表中具有(在 INNER JOIN 情况下)或可能没有(在 LEFT JOIN 情况下)另一个表中匹配行的表中的行。

同样,在 MySQL 中, 我们也可以在 UPDATE 语句中使用 JOIN 子句执行跨表更新,语法就是这样:

UPDATE T1, T2,  [INNER JOIN | LEFT JOIN] T1 ON T1.C1 = T2. C1  SET T1.C2 = T2.C2,      T2.C3 = expr  WHERE condition

我们还是详细的说明一下上面的语法:

  • 首先,在 UPDATE 子句之后,指定主表(T1)和希望主表联接到的表(T2)。请注意,必须在UPDATE 子句之后至少指定一个表

  • 接下来,指定你要使用的联接类型,即 INNER JOIN 或 LEFT JOIN 以及联接谓词。 JOIN子句必须出现在 UPDATE 子句之后(这个大家都是知道的哈)

  • 然后,将新值分配给要更新的 T1或 T2 表中的列

  • 最后,在 WHERE 子句中指定一个条件以将行限制为要更新的行

如果你遵循 update 语法,你会发现有另外一种语法也可以完成跨表更新

UPDATE T1, T2  SET T1.c2 = T2.c2,        T2.c3 = expr  WHERE T1.c1 = T2.c1 AND condition

上面的语法其实隐式使用了 inner join 关键字,完全等同于下面的样子:

UPDATE T1,T2  INNER JOIN T2 ON T1.C1 = T2.C1  SET T1.C2 = T2.C2,        T2.C3 = expr  WHERE condition

个人建议还是加上 inner join 关键字吧,这样可读性更好,尽享丝滑,你觉得呢?

我摸鱼看到的,觉得是灵魂翻译

谈太廉,秀你码 (Talk is cheap,show me the code)

Update Join 例子

年底了,又到了评绩效的时候了,就是那个叫 KPI 的东东(你们有吗),听说要根据 KPI 调工资了。有两张表

第一张表「employees-员工表」

建表语句如下:

create table employees  (      employee_id bigint auto_increment comment '员工ID,主键',      employee_name varchar(50) null comment '员工名称',      performance int(4) null comment '绩效分数 1,2,3,4,5',      salary float null comment '员工薪水',      constraint employees_pk          primary key (employee_id)  )  comment '员工表';

第二张表「merits-绩效字典表」

建表语句如下:

create table merits  (      performance int(4) null,      percentage float null  )  comment '绩效字典表';

先生成一些模拟数据

-- 绩效字典初始化数据  INSERT INTO merits(performance, percentage)  VALUES (1, 0),         (2, 0.01),         (3, 0.03),         (4, 0.05),         (5, 0.08);  -- 员工表初始化数据  INSERT INTO employees(employee_name, performance, salary)  VALUES ('拱哥', 1, 1000),         ('小段总', 3, 20000),         ('大人', 4, 18000),         ('司令', 5, 28000),         ('老六', 2, 10000),         ('罗蒙', 3, 20000);

调薪规则:

原有薪资 + (原有薪资 * 当前绩效对应的调薪百分比)

按照调薪规则写 update 语句:

UPDATE employees      INNER JOIN      merits ON employees.performance = merits.performance  SET salarysalary = salary + salary * percentage;

拱哥绩效不好,没给涨工资......

三横一竖一咕嘎,四个小猪?来吃zha,咕嘎咕嘎又来俩

临近年底,公司又来了两位新同事, 但是公司年度绩效已经评完,所以新员工绩效为 NULL

INSERT INTO employees(employee_name, performance, salary)  VALUES ('馮大', NULL, 8000),         ('馮二', NULL, 5000);

新员工工作干的不错,也要 1.5% 涨点工资的。如果我们还是用 UPDATE INNER JOIN,按照上面的更新语句是不可能完成的,因为条件等式不成立,这是我们就要用到 UPDATE LEFT JOIN 了

UPDATE employees      LEFT JOIN      merits ON employees.performance = merits.performance  SET salarysalary = salary + salary * 0.015  WHERE merits.percentage IS NULL;

"mysql跨表更新怎么实现"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

更新 绩效 员工 子句 语句 语法 面的 就是 数据 字典 工资 情况 还是 变化 接下来 人员 信息 公司 关键 关键字 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳市人人互联网科技有限公司 智能科技公司是互联网公司吗 金融科技创新监管互联网金融 互联网金融 科技 高科技与互联网 狮子座互联网科技 碳银互联网科技有限公司 广州紫鲸互联网科技 互联网大会黑科技排名 互联网科技创新服务 宁夏科技产业互联网案例 世界互联网科技公司市值排名 赶超互联网科技 微信多开 晓花互联网科技有限公司网址 速维有品互联网信息科技(苏州)有限公司 科技互联网的核心竞争力 广州千川互联网科技有限公司 宇信科技在杭州互联网排第几 亚光科技低轨卫星互联网 广东猫王互联网科技有限公司电话 瑰夏咖啡 广州万易互联网科技有限公司 厦门比较好的科技互联网公司 崇明区互联网教育科技诚信经营 链环科技传统企业怎么转型互联网 深圳市罗太互联网科技有限公司 银行科技岗属于互联网吗 陕西云淼互联网科技公司 陕西彩京云互联网科技有限公司 安徽九吞吴互联网科技有限公司
0