mysql实现多表关联更新的详细方法
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,不知道大家之前对类似mysql实现多表关联更新的详细方法的文章有无了解,今天我在这里给大家再简单的讲讲。感兴趣的话就一起来看看正文部分吧,相信看完mysql实现多表关联更新的详细方法你一定会有所收获的
千家信息网最后更新 2026年11月02日mysql实现多表关联更新的详细方法
不知道大家之前对类似mysql实现多表关联更新的详细方法的文章有无了解,今天我在这里给大家再简单的讲讲。感兴趣的话就一起来看看正文部分吧,相信看完mysql实现多表关联更新的详细方法你一定会有所收获的。

创建以下的简单模型,并构造部分测试数据:
在某个业务受理子系统BSS中,
--客户资料表create table customers(customer_id number(8) not null, -- 客户标示city_name varchar2(10) not null, -- 所在城市customer_type char(2) not null, -- 客户类型...)create unique index PK_customers on customers (customer_id)
由于某些原因,客户所在城市这个信息并不什么准确,但是在客户服务部的CRM子系统中,通过主动服务获取了部分客户20%的所在城市等准确信息,于是你将该部分信息提取至一张临时表中:
create table tmp_cust_city(customer_id number(8) not null,citye_name varchar2(10) not null,customer_type char(2) not null)
1) 最简单的形式
--经确认customers表中所有customer_id小于1000均为'北京'--1000以内的均是公司走向全国之前的本城市的老客户:)update customersset city_name='北京'where customer_id<1000
2) 两表(多表)关联update -- 仅在where字句中的连接
--这次提取的数据都是VIP,且包括新增的,所以顺便更新客户类别update customers a -- 使用别名set customer_type='01' --01 为vip,00为普通where exists (select 1from tmp_cust_city bwhere b.customer_id=a.customer_id)
3) 两表(多表)关联update -- 被修改值由另一个表运算而来
update customers a -- 使用别名set city_name=(select b.city_name from tmp_cust_city b where b.customer_id=a.customer_id)where exists (select 1from tmp_cust_city bwhere b.customer_id=a.customer_id)-- update 超过2个值update customers a -- 使用别名set (city_name,customer_type)=(select b.city_name,b.customer_typefrom tmp_cust_city bwhere b.customer_id=a.customer_id)where exists (select 1from tmp_cust_city bwhere b.customer_id=a.customer_id)
注意在这个语句中,
(select b.city_name,b.customer_typefrom tmp_cust_city bwhere b.customer_id=a.customer_id)与(select 1from tmp_cust_city bwhere b.customer_id=a.customer_id)
是两个独立的子查询,查看执行计划可知,对b表/索引扫描了2篇;
如果舍弃where条件,则默认对A表进行全表
更新,但由于(select b.city_name from tmp_cust_city b where where b.customer_id=a.customer_id)
有可能不能提供"足够多"值,因为tmp_cust_city只是一部分客户的信息,
所以报错(如果指定的列--city_name可以为NULL则另当别论):
01407, 00000, "cannot update (%s) to NULL"
// *Cause:
// *Action:
替换的方法:
update customers a -- 使用别名set city_name=nvl((select b.city_name from tmp_cust_city b where b.customer_id=a.customer_id),a.city_name)或者set city_name=nvl((select b.city_name from tmp_cust_city b where b.customer_id=a.customer_id),'未知')-- 当然这不符合业务逻辑了
一个比较简便的方法就是将A表代入 值表达式 中,使用group by 和having 字句查看重复的纪录。
(select b.customer_id,b.city_name,count(*) from tmp_cust_city b,customers a where b.customer_id=a.customer_id group by b.customer_id,b.city_name having count(*)>=2)
看完mysql实现多表关联更新的详细方法这篇文章,大家觉得怎么样?如果想要了解更多相关,可以继续关注我们的行业资讯板块。
客户
方法
关联
更新
信息
别名
部分
城市
所在
业务
子系统
字句
数据
北京
服务
普通
简便
主动
另当别论
这不
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
为想互联网科技怎么样
科技股互联网
科技信息互联网
深圳科技互联网
奇酷互联网科技
凡科互联网科技
互联网科技缩写
互联网养老 桔豆科技
人人互联网科技是培训
中正互联网科技招聘
随着互联网科技发展
昭通云南众福互联网科技有限公司
深圳市优智互联网科技有限公司
想开互联网科技公司怎么样
佛山市翊博互联网络科技有限公司
深圳无忧互联网科技
21世纪互联网科技成就
全球科技与互联网公司市值变化
互联网科技接地气
科技互联网企业在行动
科技和互联网公司
科技创新与互联网经济
嘟嘟瓜互联网科技
互联网养老 桔豆科技
顶级互联网科技成果有哪些
栖莱科技互联网股份有限公司
互联网科技公司有风险吗
宜昌元轩互联网科技有限公司
消费医药和互联网科技
中国互联网公司排名锤子科技