mysql实现多表关联更新的详细方法
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,不知道大家之前对类似mysql实现多表关联更新的详细方法的文章有无了解,今天我在这里给大家再简单的讲讲。感兴趣的话就一起来看看正文部分吧,相信看完mysql实现多表关联更新的详细方法你一定会有所收获的
千家信息网最后更新 2025年11月08日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安全错误
数据库的锁怎样保障安全
计算机一级网络技术要求
工程类软件开发有前途吗
网络安全领域的研究报告
数据库对象名不存在
花园战争 服务器
零基础了解软件开发
培养网络安全人才国家安全
cad软件开发发展前景
软件开发几个模型
excel导入其他数据库
腾讯云轻量应用服务器密码
兆物网络技术有限公司
发送邮件时显示对方服务器未响应
什么是网络安全接入方案
网络安全周频道
数据库应用技术展示
网络安全交友指南
彩旗网络技术有限公司番禺
网络安全故障检讨
代理服务器投票
关于维普数据库正确的说法是
谷歌服务器文件怎么打开
河南费纳软件开发公司
逃跑吧少年bug服务器
发放网络安全知识宣传手册
医院网络安全责任追究
确保冬奥会期间网络安全
校园网络安全解决方案提纲
西安直播软件开发哪家公司好
游戏里连接不到服务器是指什么